局部類型空屬類型靜態類牛
局部類型
局部類型的引入 沒有局部類型的時候(C# 1.0)
class App
{
public void Foo(){...}
...
public void Bar(){...}
...
}
有了局部類型之后(C# 2.0)
partial class App
{
public void Foo()
{...}
...
}
partial class App
{
public void Bar()
{...}
...
}
局部類型簡介
局部類型允許我們將一個類型(類、結構或者接口)分成幾個部分,分別實現在幾個不同的.cs文件中。
局部類型適用于以下情況:
- 類型特別大,不宜放在一個文件中實現;
- 一個類型中一部分代碼為自動化工具生成的代碼,不宜與我們自己編寫的代碼混合在一起。
局部類型是一個純語言層的編譯處理,不影響任何執行機制 - 事實上C#編譯器在編譯的時候仍會將各個部分的局部類型可并成一個完整的類。
局部類型的一些限制
局部類型只適用于類、結構、或接口,不支持委托或枚舉。
同一個類型的各個部分必須都有修飾符partial。
使用局部類型時,一個類型的各個部分必須位于相同的名稱空間中。
一個類型的各個部分必須被同時編譯。換言之,C#不支持先編譯一個類型的某些部分,然后再編譯一個類型的某些部分。
局部類型的幾個特點
關鍵字partial是一個上下文關鍵字,只有和class、struct、interface放在一起時才有關鍵字的含義。因此partial的引入不會影響現有代碼中名稱為partial的變量。
局部類型的個數并不必須為2個或2個以上,也可以為1個,雖然這時候已經沒有“局部”的必要。
局部類型的各個部分一般是分開放在幾個不同的.cs文件中,但C#編譯器允許我們將它們放在同一個.cs文件中。
在局部類型上應用特性
局部類型上的特性具有“累加”效應。換言之,如下的代碼:
[Attr1,Attr2(\"hello\")]
partial class A{}
[Attr3,Attr2(\"goodbye\")]
partial class A{}
相當于在A類上應用了如下特性:
[Attr1,Attr2(\"hello\"),Attr3,Attr2(\"goodbye\")]
partial class A{}
局部類型上的修飾符
一個類型的各個部分上的訪問保護修飾符必須維持一致性。
如果一個類型有一個部分使用了abstract修飾符,那么整個類將被視為抽象類。
如果一個類型有一個部分使用了sealed修飾符號, 那么整個類將被視為密封類。
一個類的各個部分不能使用相互矛盾的修飾符,比如不能在一個部分上使用abstract,又在另一個部分上使用sealed。
局部類型的基類或接口
一個類型的各個部分上指定的基類必須一致。某些部分可以不指定基類,但如果指定,則必須相同。
局部類型上的接口具有“累加”效應,換言之,如下的代碼:
partial class C:IA,IB{...}
partial class C:IC{...}
partial class C:IA,IB{...}
相當于如下代碼:
class C:IA,IB,IC{...}
空屬類型
空屬類型簡介
空屬類型允許一個值類型具有“空值”意義,從而方便很多場合的運算,如數據庫中的空字段。
空值類型演示:
int i = 123;
就是在進口貨物要出港時起到把關作用的那根欄桿 int? x = i;
double? y = x;
int? z = (int?)y;
空屬類型的幾個注意點
空屬類型實際上是一個泛型類型
llable。空屬類型的基礎類型就是llable的類型參數,其中T必須為值類型。
空屬類型如果值不為空,可以運用同樣的基礎類型所具有的運算,如:+、 -、 *、 /
空屬類型的HasValue屬性用來判斷類型是否為空,如果不為空,則可以通過Value屬性來獲取它的基礎類型的值。
靜態類型
靜態類簡介
靜態類只用于包含靜態成員的類型,它既不能實例化,也不能被繼承。它相當于一個sealed abstract類。
static class MyUtility
{
public const int data;
public static void Foo()
{
...
}
}
靜態類的幾個注意點
靜態類不能有實例構造器。
靜態類不能有任何實例成員。
靜態類不能使用abstract或sealed修飾符。
靜態類默認繼承自ject根類,不能顯式指定任何其他基類。
靜態類不能指定任何接口實現。
靜態類的成員不能有protected或protected internal訪問保護修飾符。
總結
局部類型是一個純語言層的編譯處理,不影響任何執行機制 - 事實上,C#編譯器在編譯的時候仍會將各個部分的局部類型合并成一個完整的類。
空屬類型允許一個值類型具有“空值”意義,從而方便很多場合的運算,如數據庫空字段,空屬類型實際上是一個泛型類llable。
靜態類只用語包含景泰成員的類型,他既不能實例化,也不能被繼承。它相當于一個sealed abstract類。
查看本文來源
太原哪家牛皮癬醫院正規重慶早泄治療費用
孩子不吃飯怎么辦
- 不自我貶低,不自怨,更不能消極。領導批評揶揄有套路。你要懂
- 逆向思維的悲慘
- 一年自然流產2次、胎盤畸形,28歲的她如何成功讓寶寶著陸的?
- 時隔6天,通州今日再迎0新增!昨日公布一批風險點位,涉北京南站、6號線、322路等!
- 41歲女子視力驟降幾乎失明 檢查竟是絲絲大出血
- 四川南部縣回應“網友反映一孩子在校反遭多名學生欺負”:組建專班調查核實
- 楊浦區通報1例全球化面陽性感染者相關情況丨疫情防控新聞發布會
- 求人補缺最忌諱這4件事,別人不僅不幫,還傷感情!
- 2022年軍校在皖招生開發計劃來了!
- 【瑞聲音 佳病例】凝膠治療在超快通道麻醉下體外循環冠脈搭橋術中的應用
- 我們終其一生努力要變成為更好的樣子,卻修煉變成一個不喜歡的自己
- 給狗狗染色是可愛還是危害位置