所有類預設繼承於 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(); }}