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