1. Trang chủ
  2. » Công Nghệ Thông Tin

C sharp programming tutorial

54 472 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 54
Dung lượng 324,5 KB

Nội dung

Programming C# for Beginners Programming C# is a book written in step-by-step tutorial format for beginners and students who want to learn C# programming It is recommended that you have some programming experience using any of the object-oriented languages such as C++, Pascal, or Java In this tutorial, you will learn how to write and compile C# programs; understand C# syntaxes, data types, control flow, classes and their members, interfaces, arrays, and exception handling After completing this tutorial, you should have a clear understanding of the purpose of C# language, its usages, and how to write C# programs The current version of C# language is 3.0 This tutorial covers all versions of C# language including 1.0, 2.0, and 3.0 The features added in versions 2.0 and 3.0 are covered in the Advanced Topics of this tutorial Table of Contents Introduction C# Language Features C# Editors & IDEs C# Components Types Attributes Variables Constants Expressions and Operators 10 Control Statements 11 Classes 12 Events 13 Indexers 14 Inheritance 15 C# 2.0 Features 16 C# 3.0 Features Introduction Microsoft developed C#, a new programming language based on the C and C++ languages Microsoft describes C# in this way: ”C# is a simple, modern, object– oriented, and typesafe programming language derived from C and C++ C# (pronounced c sharp) is firmly planted in the C and C++ family tree of languages and will immediately be familiar to C and C++ programmers C# aims to combine the high productivity of visual basic and raw power of C++.” Anders Hejlsberg, the principal architect of C#, is known for his work with Borland on Turbo Pascal and Delphi (based on object–oriented Pascal) After leaving Borland, Hejlsberg worked at Microsoft on Visual J++ Some aspects of C# will be familiar to those, who have programmed in C, C++, or Java C# incorporates the Smalltalk concept, which means everything is an object In other words, all types in C# are objects C# properties are similar to Visual Basic language properties The Rapid Application Development (RAD) goal in C# is assisted by C#’s use of concepts and keyword, such as class, structure, statement, operator, and enumeration The language also utilizes the concepts contained in the Component Object Model (COM) architecture Unlike Visual Basic or Delphi, Events is a type in C# and can belong to an object Members of a class object can have variables, methods, properties, attributes, and events Attributes are another nice feature of C# language NOTE: C# is a case sensitive language C# Language Features C# was developed as a language that would combine the best features of previously existing Web and Windows programming languages Many of the features in C# language are preexisted in various languages such as C++, Java, Pascal, and Visual Basic Here is a list of some of the primary characteristics of C# language • • • • • • • Modern and Object Oriented Simple and Flexible Typesafety Automatic Memory Management Versioning Control Cross Platform Interoperability Advanced features introduced in C# 2.0 and 3.0 a Modern and Object Oriented A modern language is one that provides latest features and tools for developing scalable, reliable, and robust industry–standard applications C# is a modern language The current trend in programming is Web development, and C# is the best language for developing web application and components for the Microsoft NET platform As mentioned, C# is an object–oriented language It supports all the basic object oriented language features: encapsulation, polymorphism, and inheritance b Simple and Flexible C# is as simple to use as Visual Basic, in that everything in C# represented as an object All data type and components in C# are objects C++ programmers are sometimes confused when choosing different access operators to process object With C# you use a dot (.) operator to access the object members Programmers use C# to develop both managed and unmanaged code Managed code is code managed through the CLR module It handles garbage collection, typesafety, and platform-independence behavior Unmanaged code, on the other hand is code run outside the CLR, such as an ActiveX control C# provides the flexibility of using native Win 32 application programming interface (API) and unmanaged code through COM+ C# enables you to declare unsafe classes and members having pointers, COM interfaces, structures, and native APIs Although the class and its member are not typesafe, they still can be executed from managed code using COM+ Using the N/ Direct features of C# and COM+, you can use the C language API With the help of the COM+ run-time and the COM+ Common Language Specification (CLS), you can access the COM and COM+ API Using the Sysimport attribute, you can even access native Windows API (DLLs) in C# See the “Attributes” section of this article for more about attributes c Typesafety C# is a typesafe language All variables and classes (including primitive type, such as integer, Boolean, and float) in C# are a type, and all type are derived from the object the object type The object type provides basic functionality, such as string conversion, and information about a type (See “The Object Class” section of this article for more about the object type.) C# doesn’t support unsafe type assignments In other words, assigning a float variable directly to a Boolean variable is not permitted If you assign a float type to a Boolean type, the compiler generates an error C# supports two kinds of type: value type and reference types All value types are initialized with a value of zero, and all reference types are automatically initialized with a null value (local variable need to be initialized explicitly or the compiler throw a warning) The “Type in C#” section of this article will discuss types in more detail d Automatic Memory Management and Garbage Collection Automatic memory management and garbage collection are two important features of C# With C#, you don’t need to allocate memory or release it The garbage collection feature ensures that unused references are deleted and cleaned up in memory You use the new operator to create type object, but you never need to call a delete operator to destroy the object If the garbage collector finds any unreferenced object hanging around in memory, it removes it for you Although you can’t call delete directly on an object, you have way to get garbage collector to destroy objects e Versioning Control and Scalable If you’re a Microsoft Window developer, you should be familiar with the expression DLL hell, which refers to having multiple versions of the same Dynamic Link Library (DLL) and not having backward and forward compatibility For example, you can’t run programs written in Microsoft Foundation class (MFC) version4.0 on systems with MFC version 3.0 or earlier This is one of the biggest challengers for a developer, especially if you’re developing MFC applications C# model is based on namespaces All interfaces and classes must be bundled under a namespace A namespace has classes as its members You can access all the members or just a single member of a namespace Two separate namespaces can have the same class as their member C# also supports binary compatibility with a base class Adding a new method to a base class won’t cause any problems in your existing application The NET assemblies contain metadata called manifest A manifest stores information about an assembly such as its version, locale, and signature There is no concept of registry entries for handing compatibility In NET, you simple put your assembly into one global folder if you want to make it sharable; otherwise, you put it in a private folder for private use only f Language and Cross Platform Interoperability C#, as with all Microsoft NET supported language, shares a common NET run-time library The language compiler generates intermediate language (IL) code, which a NET supported compiler can read with the help of the CLR Therefore, you can use a C# assembly in VB.NET without any problem, and vice versa With the full support of COM+ and NET framework services, C# has the ability to run on cross-platform systems The Web-based applications created from NET use an Extensible Markup Language (XML) model, which can run on multiple platforms g Advanced Features introduced in C# 2.0 and 3.0 These features are discussed in more details in C# 2.0 Features and C# 3.0 Features sections of this tutorial The following features were introduced in C# version 2.0 • • • • • • Partial classes Generics Nullable Types Anonymous Methods Iterators Property Access Accessibility Modifiers The following features were introduced in C# version 3.0 • • • • • Extension Methods Implicit Typed Local Variables Object and Collection Initializers Query Expressions Lambda Expressions C# Editors and IDEs Before starting your first C# application, you should take a look at the C# editors available for creating applications Visual Studio NET (VS.NET) Integrated Development Environment (IDE) is currently the best tool for developing C# applications Installing VS NET also installs the C# command-line compiler that comes with the NET Software Development Kit (SDK) If you don’t have VS.NET, you can install the C# command-line compiler by installing the NET SDK After installing the NET SDK, you can use any C# editor Visual Studio 2005 Express is a lighter version of Visual Studio that is free to download You can also download Visual C# 2005 Express version for free To download these Express versions, go to MSDN website, select Downloads tab, and then select Visual Studio related link Tip: There are many C# editors available- some are even free Many of the editors that use the C# command-line compiler are provided with the NET SDK Visit the C# Corner’s tools section (http://www.c-sharpcorner.com/tools.asp) for a list of available C# editor If you can’t get one of these editors, you can use a text editor, such as Notepad or Word pad In the next sections, you’ll learn how to write a windows forms application in notepad, and then you’ll look at the VS NET IDE “Hello, C# Word!” Let’s write our first simple “Hello, World!” program The program will write output on your console saying, “Hello, C# word!” Before starting with the C# programming, however you must install the C# compiler The C# command-line compiler, csc.exe, comes with Microsoft’s NET SDK The NET SDK supports the Windows 98, Windows ME, Windows NT 4.0 and Windows 2000 and later platforms After installing the compiler, type the code for the “HELLO, C# World!” program in any C# editor, which is shown in Listing Then save the file as first.cs Listing “Hello, C# world!” code using System; class Hello { static void Main() { Console.WriteLine("Hello, C# world!"); } } You can compile C# code from the command line using this syntax: csc C:\\temp\first.cs Make sure the path of your cs file is correct and that the csc executable is included in your path Also make sure that path of C# Compiler (csc.exe) is correct After compiling your code, the C# compiler creates an exe file called first.exe under the current directory Now you can execute the exe from window explorer or from the command line Figure shows the output Figure “Hello, C# World!” program output Did you see ”Hello, C# world!” on your console? Yes? Congratulations!!! You’re now officially a C# programmer No? You may want to check the path of your file first.cs and the path of the compiler csc.exe You have now written your first few lines of C# code But what does each line of your program means? I’ll describe the various components of your “Hello, C# world!” program The first line of your program is this: using System; The NET framework class library is referenced in namespaces The System namespace contains the Console class, which reads from or writes to the console The class keyword defines a new class that is followed by a class name, as seen in the second line of the “Hello, C# World!” code listing: class Hello { } The next line of code is the static void Main() function: static void Main() { Console.WriteLine ("Hello, C# World!"); } } In C#, every application must have a static Main() or int Main() entry point The concept is similar to that of the Main() function of C++ This means, this is what a compiler will be looking for to start the application and whatever code is written in this method will be executed before any thing else The Console class is defined in the System namespace You can access its class members by referencing them directly Writeline(), A method of the Console class, writes a string and a line terminator to the console C# Components Now that you’ve finished your first C# program, it’s time to talk about the intricacies of the C# language In this section, I’ll discuss the C# syntax and components and how to use them Namespace and Assemblies The first line of the “Hello, C# World!” program was this: using System; This line adds a reference to the System namespace to the program After adding a reference to a namespace, you can access any member of the namespace As mentioned, in NET library references documentation, each class belongs to a namespace But what exactly is a namespace? To define NET classes in a category so they’d be easy to recognize, Microsoft used the C++ class-packaging concept know as namespaces A namespace is simply a grouping of related classes The root of all namespaces is the System namespace If you see namespaces in the NET library, each class is defined in a group of similar category For example, The System.Data namespace only possesses data-related classes, and System.Multithreading contains only multithreading classes When you create a new application using visual C#, you see that each application is defined as a namespace and that all classes belong to that namespace You can access these classes from other application by referencing their namespaces For example, you can create a new namespace MyOtherNamespace with a method Hello defined in it The Hello method writes “Hello, C# World!” to the console Listing2 shows the namespace Listing Namespace wrapper for the hello class // Called namespace namespace MyOtherNamespace { class MyOtherClass { public void Hello() { Console.WriteLine ("Hello, C# World!"); } } } In listing 3, you’ll see how to reference this namespace and call MyOtherClass’s Hello method from the main program In listing 2, the MyOtherClass and its members can be accessed from other namespaces by either placing the statement using MyOtherNamespace before the class declaration or by referring to the class my other namespace before the class declaration or by referring to the class as MyOtherNamespace.Hello, as shown in listing and listing Listing Calling my other Namespace Name space members using System; using MyOtherNamespace; // Caller namespace namespace HelloWorldNamespace { class Hello { static void Main() { MyOtherClass cls = new MyOtherClass(); } } cls.Hello(); } // Called namespace namespace MyOtherNamespace { class MyOtherClass { public void Hello() { Console.WriteLine("Hello, C# World!"); } } } As you have seen in listing 3, you include a namespace by adding the using directly You can also reference a namespace direct without the using directive Listing shows you how to use MyOtherClass of MyOtherNamespace Listing Calling MyOtherNamespace the HelloWorld // Caller namespace namespace HelloWorldNamespace { class Hello { static void Main() namespace member from the { } MyOtherNamespace.MyOtherClass cls = new MyOtherNamespace.MyOtherClass(); cls.Hello(); } } Standard Input and Output Streams The System.Console class provides the capability to read streams from and write streams to the System console It also defines functionality for error streams The Read operation reads data from the console to the standard input stream, and the Write operation writes data to the standard output stream The standard error stream is responsible for storing error data These streams are the automatically associated with the system console The error, in, and out properties of the Console class represents standard error output, standard input and standard output streams In the standard output stream, the Read method reads the next character, and the ReadLine method reads the next line The Write and WriteLine methods write the data to the standard output stream Table describes some of the console class methods Table The System.Console Class methods METHOD Read ReadLline Write WriteLine DESCRIPTION Reads a single character Reads a line Writes a line Writes a line followed by a line terminator EXAMPLE int i = Console.Read(); string str = Console.ReadLine(); Console.Write ("Write: 1"); Console.WriteLine("Test Output with Line"); Listing shows you how to use the Console class and its members Listing Console class example using System; namespace ConsoleSamp { class Classs1 { static void Main(string[ ] args ) { Console.Write("Standard I/O Sample"); Console.WriteLine(""); Console.WriteLine ("= = = = = = = = "); Console.WriteLine ("Enter your name "); string name = Console.ReadLine(); Console.WriteLine("Output: Your name is : "+ name); } } } Data } iTotal = iTot; } class TestmyClass { static void Main() { myClass cls = new myClass(); myClass cls1 = new myClass(3, 4); Console.WriteLine(cls1.iCounter.ToString()); Console.WriteLine(cls1.iTotal.ToString()); } } Destructors A destructor is called when it’s time to destroy the object Destructors can’t take parameters See following code: class myClass { ~myClass() { // free resources } } TIP: It’s not mandatory; in fact it’s unadvisable to call destructors They’re called automatically by the CLR Methods A method is a member that implements some functionality It’s similar in appearance to the methods found in C++ and java A method can return a value have, a list of parameters, and can be accessed through the class, whereas non static Static methods are accessed through the class, whereas non-static methods are accessed through the instance of the class For example, listing 28 adds a method sum to the class myClass and called this method from the Main method Listing 28 Class method example using System; class myClass { public int Sum(int a, int b) { int res = a + b; return res; } } class TestmyClass { static void Main() { myClass cls = new myClass(); int total = cls.Sum(5, 8); Console.WriteLine(total.ToString()); } } Methods in C# support function overloading in a similar way as C++ If you have programmed in C++, you’ll notice that C# methods are similar to C++ functions (and almost mirror those methods found in java) So it’s not a bad idea to call function overloading in C# method overloading In listing 29, I over- overload the Sum method by passing in different types of values and call each of the overloaded Sum methods from the Main method Listing 29 Method overloading example using System; class myClass { public int Sum(int a, int b) { int res = a + b; return res; } public float Sum(float a, float b) { float res = a + b; return res; } public long Sum(long a, long b) { long res = a + b; return res; } public long sum(long a, long b, long c) { long res = a + b + c; return res; } public long Sum(int[] a) { int res = 0; for (int i=0; i < a.Length; i++) { res += a[i]; } return res; } public void Sum() { //return nothing } } class TestmyClass { static void Main() { myClass cls = new myClass(); int intTot = cls.Sum(5,8); Console.WriteLine("Return integer sum:"+ intTot.ToString()); cls.Sum(); long longTot = cls.Sum(Int64.MaxValue - 30, 8); Console.WriteLine("Return long sum:" + longTot.ToString()); float floatTot = cls.Sum(Single.MaxValue-50, 8); Console.WriteLine("Return float sum:" + floatTot.ToString()); int[] myArray = new int[] {1,3,5,7,9}; Console.WriteLine("Return sum of array = {0}", cls.Sum(myArray).ToString()); } } The ref and out Parameters Did you ever need your method to return more than one value? You may need to this occasionally, or you may need to use the same variables that you pass as an argument of the method When you pass a reference type, such as a class instance, you don’t have to worry about getting a value in a separate variable because the type is already being passed as a reference and will maintain the changes when it returns A problem occurs when you want the value to be returned in the value type The ref and out parameters help to this with value types The out keyword defines an out type parameter You Use the out keyword to pass a parameter to a method This example is passing an integer type variable as an out parameter You define a function with the out keyword as an argument with the variable type: myMethod(out int iVal1) The out parameter can be used to return the values in the same variable passed as a parameter of the method Any changes made to the parameter will be reflected in the variable Listing 30 shows an example of the parameter Listing 30 Using the out parameter using System; public class myClass { public static void ReturnData(out int iVal1, out int iVal2) { iVal1 = 2; iVal2 = 5; } public static void Main() { int iV1, iV2; // variable need not be initialized ReturnData(out iV1, out iV2); Console.WriteLine(iV1); Console.WriteLine(iV2); } } The ref keyword defines a ref type parameter You pass a parameter to a method with this keyword, as in listing 31 This example passes an integer type variable as a ref parameter This is a method definition: myMethod(ref int iVal1) You can use the ref parameter as a method input parameter and an output parameter Any changes made to the parameter will be reflected in the variable See listing 31 Listing 31 A ref parameter example using System; public class myClass { public static void ReturnData(ref int iVal1, ref int iVal2, ref int iVal3) { iVal1 +=2; iVal2 = iVal2*iVal2; iVal3 = iVal2 + iVal1; } public static void Main() { int iV1, iV2, iV3; // variable need not be initialized iV1 = 3; iV2 = 10; iV3 = 1; ReturnData(ref iV1, ref iV2, ref iV3); Console.WriteLine(iV1); Console.WriteLine(iV2); Console.WriteLine(iV3); } } In this method, ReturnData takes three values as input parameters, operates on the passed data returns the result in the same variable Properties Other than methods, another important set of members of a class is variables A variable is a type that stores some value The property member of a class provides access to variables Some examples of Properties are font type, color, and visible properties Basically, Properties are fields A field member can be accessed directly, but a property member is always accessed through accessor and modifier methods called get and set, respectively If you have ever created active X controls in C++ or visual basic, or created JavaBeans in java, you understand Note: Visual Basic programmers will note that Let is not available in C# This is because all types are objects, so only the set access or is necessary In Listing 32 you create two properties of myClass:Age and MaleGender Age is an integer property, and MaleGender is a Boolean type property As you can see in the example, the get and set keywords are used to get and set property values You’re reading and writing property values from the Main method Note that leaving out the set method in a property makes the property read-only Listing 32 Class property member example using System; class myClass { private bool bGender; private int intAge; // Gender property public bool MaleGender { get { } set { return bGender; bGender = value; } } // Age property public int Age { get { return intAge; } set { intAge = value; } } } class TestmyClass { static void Main() { myClass cls = new myClass(); // set properties values cls.MaleGender = true; cls.Age = 25; if (cls.MaleGender) { Console.WriteLine("The Gender is Male"); Console.WriteLine("Age is" + cls Age.ToString() ); } } } Why use properties if you already have the field available? First of all, properties expose fields in classes being used in components They also provide a means for doing necessary computation before or after accessing or modifying the private fields they’re representing For example, if you’re changing the color of a control in the set method, you may also want to execute an invalidate method inside the set to repaint the screen 13 Events In C# events are a special type of delegate An event member of a class provides notifications from user or machine input A class defines an event by providing an event declaration, which is of type delegate The following line shows the definition of an event handler: public delegate void EventHandler(object sender, System.EventArgs e); The EventHandler takes two arguments: one of type object and the other of type System.EvenArgs A class implements the event handler using the event keyword In the following example, MyControl class implements the EventHandler: public class MyControl { public event EvenHandler Click; public void Reset() { Click = null; } } You probably know that Windows is an event- driven operating system In Windows programming, the system sends messages to the massage queue for every action taken by a user or the system, such as mouse–click, keyboard, touch screen, and timers Even if the operating system is doing nothing, it still sends an idle message to the message queue after a certain interval of time Although you usually use events in GUI applications, you can also implement events in console-based application You can use them when you need to notify a state of an action You’ll have a look at an example of both types Listing 33 shows you how to implement events and event handlers in a consolebased application The Boiler.cs class defines the BoilerStatus event The SetBoilerReading method sets the boiler temperature and pressure readings, and it writes the boiler status on the console based on the temperature and pressure reading Boiler.cs defines BoilerStatus using the event keyword Listing 33 Boiler.cs namespace BoilerEvent { using System; public class Boiler { public delegate void EngineHandler(int temp); public static event EngineHandler BoilerStatus; public Boiler() { } public void SetBoilerReading(int temp, int pressure) { if (BoilerStatus != null) { if (temp >=50 && pressure >= 60) { BoilerStatus(temp); Console.WriteLine("Boiler Status: Temperature High"); } else if (temp < 20 || pressure < 20) { BoilerStatus(temp); Console.WriteLine("Boiler status: Temperature Low"); } else Console.WriteLine("Boiler status: Temperature Normal"); } } } } Listing 34 is a caller class (main application) that calls the event through BoilerEventSink The BoilerTempoMeter method of the sink generates a warning massage on the console only when the temperature of the boiler is zero Listing 34 Caller of Boiler.Cs namespace BoilerEvent { using System; public class Boiler { // Boiler class here } public class BoilerEventSink { public void BoilerTempoMeter(int temp) { if (temp [...]... model, and year Listing 10 a struct type example using System; struct CarRec { public string Name; public string Model; public int Year; } class TestStructureType { public static void Main () { CarRec rec; rec.Name ="Honda"; rec.Model ="Accord"; rec.Year = 1999; Console.WriteLine("Car Name: " +rec.Name); Console.WriteLine("Car Modal: " +rec.Model ); Console.WriteLine("Car: "+rec.Year); } } Figure 5 shows... access to num1 because it’s defined as a public variable, but not to num2 because it’s a private variable Listing 21 Variable access modifiers using System; class VarAccess { class AccessCls { public int num1 = 123; int num2 = 54; } static void Main() { AccessCls cls = new AccessCls(); int num1 = 98; num1 = cls.num1; //int i = cls Num2; Console.WriteLine(num1.ToString()); } } When you access class members,... variable can only be accessed with the class in which it’s defined and it’s derived class The variable can only be accessed from the current program and the type derived from the current program The variable can only be accessed within the type in which it’s defined You’ll now examine access modifiers in an example In listing 21, AccessCls is a class accessed by the Main method The Main method has access... read only, and static Accessibility modifiers Some of the modifiers discussed in previous sections can set the accessibility level of variables These are called accessibility modifiers (see table 7) Table 7 Accessibility modifiers MODIFIER internal public protected protected internal private DESCRIPTION The variable can only accessed by the current program The variable can be accessed from any where... exception if an overflow occurs The unchecked operator doesn’t throw an exception if an overflow occurs Here the code throws an exception in the case of the checked operator, whereas the unchecked part of the same code won’t throw an exception: checked { num1 += 5; } unchecked { num =+ 5; } The is operator The is operator is useful when you need to check whether an object is compatible with a type For... reference Equals Listing 7 Get Type, Equal, and ReferenceEquals using System; namespace TypesSamp { //define class 1 public class Class1: object { private void Method1() { Console.WriteLine("1 method"); } } // Define class 2 public class Class2: Class1 { private void Method2( ) { Console.WriteLine("2 method"); } } class TypeClass { static void Main(string [] args) { Class1 cls1 = new Class1(); Class2 cls2... and events to the class Listing 11 shows an example of a class type Listing 11 Class Type example // Define Class 1 public class class1:Object { private void Method1() { Console.WriteLine("1 method" ); } } The new keyword creates access to the class type After creating an instance, you can use the dot (.) operator to access its members, as shows here: Class1 cls1 = new class1(); cls1.Method1(); I’ll... clone of an object The Finalize method acts as a destructor and can clean up the resources before the garbage collector calls the object You need to override this method and write your own code to clean up the resources The garbage collector automatically calls the Finalize method if an object is no longer in use 6 Types As mentioned earlier in the article, C# supports value types and reference types Value... instance of the class, and it’s in such cases that static fields are useful By defining the static keyword, you can restrict a field to create only one instance of the variable of a class and share it with all other class instance of the same type In other words, if you change the value of a static variable in a class, all instance at the class level rather then the instance level You can use the static... new typeof checked unchecked + - ! ~ ++x x (T)x */% +> < > = is as == != AND & XOR ^ OR | AND && OR || ?: = *= /= %= += -= = &= ^= |= The checked and unchecked operators The checked and unchecked operators are two new features in C# for C+ + developers These two operators force the CLR to handle stack overflow situations The checked operators enforces overflow through an exception if ... System; struct CarRec { public string Name; public string Model; public int Year; } class TestStructureType { public static void Main () { CarRec rec; rec.Name ="Honda"; rec.Model ="Accord"; rec.Year... and that the csc executable is included in your path Also make sure that path of C# Compiler (csc.exe) is correct After compiling your code, the C# compiler creates an exe file called first.exe... HelloWorldNamespace { class Hello { static void Main() { MyOtherClass cls = new MyOtherClass(); } } cls.Hello(); } // Called namespace namespace MyOtherNamespace { class MyOtherClass { public void Hello() { Console.WriteLine("Hello,

Ngày đăng: 05/12/2016, 12:45

TỪ KHÓA LIÊN QUAN

w