所有类默认继承于 System.Object(或叫 Object):
using System; class MyClass1 { } class MyClass2 : Object { } class MyClass3 : System.Object { } class Program { static void Main() { MyClass1 obj1 = new MyClass1(); MyClass2 obj2 = new MyClass2(); MyClass3 obj3 = new MyClass3(); Console.WriteLine(obj1.ToString()); //MyClass1 Console.WriteLine(obj2.ToString()); //MyClass2 Console.WriteLine(obj3.ToString()); //MyClass3 Console.ReadKey(); } }
类的访问限制和抽象类、密封类:
using System; /* internal: 只用于当前项目的类, 这是默认的可以省略 */ /* public : 公开使用的类 */ class MyClass1 { } internal class MyClass2 { } public class MyClass3 { } /* abstract: 只能继承、不能直接实例化的类 */ abstract class MyClass4 { } internal abstract class MyClass5 { } public abstract class MyClass6 { } // sealed: 不能继承的类 sealed class MyClass7 { } internal sealed class MyClass8 { } public sealed class MyClass9 { } class Program { static void Main() { MyClass1 obj1 = new MyClass1(); MyClass2 obj2 = new MyClass2(); MyClass3 obj3 = new MyClass3(); /* MyClass4、MyClass5、MyClass6 是抽象类, 不能实例化 */ MyClass7 obj7 = new MyClass7(); MyClass8 obj8 = new MyClass8(); MyClass9 obj9 = new MyClass9(); Console.WriteLine(obj1.ToString()); //MyClass1 Console.WriteLine(obj2.ToString()); //MyClass2 Console.WriteLine(obj3.ToString()); //MyClass3 Console.WriteLine(obj7.ToString()); //MyClass7 Console.WriteLine(obj8.ToString()); //MyClass8 Console.WriteLine(obj9.ToString()); //MyClass9 Console.ReadKey(); } }
方法的访问限制:
using System; class MyClass { /* private: 类自身使用的私有方法, 这是默认的 */ string Method1() { return "Method1"; } private string Method2() { return "Method2"; } /* protected: 子类可以继承的方法 */ protected string Method3() { return "Method3"; } /* internal: 当前项目可以使用的方法 */ internal string Method4() { return "Method4"; } /* public: 公开的方法 */ public string Method5() { return "Method5"; } } class Program { static void Main() { MyClass obj = new MyClass(); /* 由于访问级别的限制, MyClass 的 Method1、Method2、Method3 都不能访问 */ Console.WriteLine(obj.Method4()); //Method4 Console.WriteLine(obj.Method5()); //Method5 Console.ReadKey(); } }
静态方法:
using System; class MyClass { /* 静态方法 */ public static string Fun1() { return "Fun1"; } internal static string Fun2() { return "Fun2"; } /* 一般方法 */ public string Fun3() { return "Fun3"; } internal string Fun4() { return "Fun4"; } } class Program { static void Main() { /* 静态方法通过类名调用: */ Console.WriteLine(MyClass.Fun1()); //Fun1 Console.WriteLine(MyClass.Fun2()); //Fun2 /* 非静态方法通过对象调用: */ MyClass obj = new MyClass(); Console.WriteLine(obj.Fun3()); //Fun3 Console.WriteLine(obj.Fun4()); //Fun4 Console.ReadKey(); } }
字段:
using System; class MyClass { public int F1; /* 字段也有 public、internal、protected、private 的区别, 默认是 private */ public static int F2; /* 静态字段, 可通过类名读写 */ public const int F3 = 2008; /* 常量字段, 可通过类名读, 只读 */ public readonly int F4; /* 只读字段, 通过对象读; 只能在声明时和构造函数中赋值 */ public MyClass() { F4 = 2010; } } class Program { static void Main() { /* 通过类名可以访问 F2、F3; 但 F3 是只读的 */ Console.WriteLine(MyClass.F2); //0 Console.WriteLine(MyClass.F3); //2008 MyClass.F2 = 2009; Console.WriteLine(MyClass.F2); //2009 /* 通过对象可以访问 F1、F4; 但 F4 是只读的 */ MyClass obj = new MyClass(); Console.WriteLine(obj.F1); //0 Console.WriteLine(obj.F4); //2010 obj.F1 = 2009; Console.WriteLine(obj.F1); //2009 Console.ReadKey(); } }
属性:
using System; class MyClass { private int MyInt; public int MyProperty { get { return MyInt; } set { if (value >= 0) MyInt = value; else MyInt = 100; } } } class Program { static void Main() { MyClass obj = new MyClass(); obj.MyProperty = 2009; Console.WriteLine(obj.MyProperty); //2009 obj.MyProperty = -1; Console.WriteLine(obj.MyProperty); //100 Console.ReadKey(); } }
只读属性:
using System; class MyClass { private int MyInt = 100; public int MyProperty { get { return MyInt; } } } class Program { static void Main() { MyClass obj = new MyClass(); Console.WriteLine(obj.MyProperty); //100 Console.ReadKey(); } }