繼續上一篇的內容,其實這兩篇沒有什么關聯。這次我們 要靜態類的學習。我們先新建兩個項目--AssemblyLibrary(類庫)和ConsolTest(控制台)
靜態類是一種很特殊的類,他有四個特點:
僅包含靜態成員。 無法實例化。 不能被繼承 不能包含實例構造函數。
AssemblyLibrary:
public static class StaticClass
{
//string a; 錯誤:僅包含靜態成員
static string a;
static StaticClass()
{
a = "1";
}
//錯誤:沒有實例構造函數
//public StaticClass()
//{
//}
}
public class SS : BuTongClass //錯誤:不能被繼承 StaticClass
{
public SS()
: base(1)
{ }
}
public class BuTongClass
{
public readonly static int i = 0;
static BuTongClass()
{
i = 1;
}
public bool Equle;
public BuTongClass(int a)
{
if (a == i)
Equle = true;
}
}
ConsolTest
static void Main(string[] args)
{
BuTongClass butong = new BuTongClass(1);
//StaticClass sc = new StaticClass(); 錯誤:不能被實例化
Console.WriteLine(butong.Equle);
Console.Read();
}
錯誤的地方我都注釋掉了。也附上了錯誤點在那里。
運行的結果:True。
如果你想對靜態的只讀變量繼續賦值
public readonly static int i = 0; 這樣可以賦值,也可以再靜態構造函數中賦值
靜態構造函數里面的變量必須是靜態成員而且只能執行一次。如果利用好這個特性,我們可以完成一些意想不到的效果,比如單例模式
傳統的代碼代碼:
View Code
public class SingeClass { private static SingeClass _instance; private static object o = new object(); public static SingeClass GetInstance() { if (_instance == null) { lock (o) { if (_instance == null) _instance = new SingeClass(); } } return _instance; } }
我們可以利用靜態構造函數的特點,實現單例:
public class SingeClass
{
private static SingeClass _instance;
static SingeClass()
{
_instance = new SingeClass();
}
private SingeClass(){}
public static SingeClass GetInstance()
{
return _instance;
}
}
昨天晚上寫的不夠嚴謹,現在把默認構造函數設置為private,讓外部不能實例化 。這里謝謝@看風景的人同學的提醒,
靜態構造函數,相對而言,使用的不多,他的調用時.net做的如果有多個靜態構造函數,那個先調用,我們不得而知。靜態類,現在使用的最多的擴展方法。在framework3.5以上,
名稱空間System.Linq就使用了大量的擴展方法
擴展方法,他必須是靜態類。擴展的方法也必須是靜態方法。

這是system.linq中的一個擴展方法的事例:我們可以看到的個是 static 類型擴展方法名(this 擴展的對象,xxxxx)
我們直接來個簡單的例子
class Program
{
static void Main(string[] args)
{
string str = "1"; ;
Console.WriteLine(str.ToInt());
Console.Read();
}
}
public static class StringEx
{
public static int ToInt(this string source)
{
int result;
if (int.TryParse(source, out result))
return result;
return 0;
}
}
很簡單吧~~~我還是必須喜歡這個擴展方法的。直接用智能提示,代碼量少了,你只要敲個.就可以 出 方法名字,前提是,你已經應用 了 你 寫的擴展方法。
堅持星期一到四,一天一篇。直到我寫完基礎篇,就當是自我復習。
