最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 的關(guān)鍵字詳細(xì)介紹

 更新時(shí)間:2012年11月13日 09:14:50   作者:  
本文將詳細(xì)介紹C#關(guān)鍵字的應(yīng)用,可供有需要的朋友參考
用于修飾類,方法,屬性和字段的關(guān)鍵字:
25EF2F35FEAF4121BB818989474E8D99 
首先從最簡(jiǎn)單的private,protected,internal,public 解釋。
public 和internal 修飾類。
public,protected,private 修飾方法。
修飾類的時(shí)候
public 代表公開,也就是所有程序集都可以訪問這個(gè)類。
internal 代表內(nèi)部的,也就是只有在同一程序集中才能訪問這個(gè)類,一般而言同一程序集就是同一個(gè)dll。
修飾方法的時(shí)候:
public 代表公開,也就是所有的類都可以訪問這個(gè)方法。
protected 代表受保護(hù)的,也就是只有我的子類才能訪問這個(gè)方法。
private 代表私有的,也就是只有我才能訪問這個(gè)方法。
接著我們來討論下const,readonly 的區(qū)別:
首先兩者都是常量,不同的是const 是編譯時(shí)常量,readonly是運(yùn)行時(shí)常量。
編譯時(shí)常量:在編譯的時(shí)候,值就已經(jīng)是常量了,任何使用該變量的地方都會(huì)被替換成常量值。
運(yùn)行時(shí)常量:在運(yùn)行的時(shí)候,值不能夠被修改。
復(fù)制代碼 代碼如下:

public class Test
{
public const string constStr = "this is a test";
public readonly string readonlyStr = "this can't be modified in runtime time";
public void Method1()
{
string s1 = constStr; // 在編譯的時(shí)候,這句話就會(huì)被替換成 string s1 = "this is a test";
readonlyStr = "error";
//嘗試修改readonlyStr,無法通過編譯,
//拋出錯(cuò)誤:readonly 字段只有在構(gòu)造函數(shù)和初始化的時(shí)候才能修改。
}
}

55CED59AEF3A442CAD539A7F94A09CA9 
OK,現(xiàn)在我們討論下abstract, virtual , new , override 關(guān)鍵字:
首先abstract 代表的是抽象,abstract 可以修飾類和方法。
修飾類的時(shí)候:
這個(gè)時(shí)候叫做抽象類,抽象類有下列性質(zhì):
抽象類不能實(shí)例化。
抽象類可以包含抽象方法和抽象訪問器,訪問器實(shí)際上也是方法。
不能用 sealed修飾符修飾抽象類,因?yàn)檫@兩個(gè)修飾符的含義是相反的。 采用 sealed 修飾符的類無法繼承,而 abstract 修飾符要求對(duì)類進(jìn)行繼承。
從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實(shí)際實(shí)現(xiàn)。
修飾方法的時(shí)候
這個(gè)時(shí)候叫做抽象方法,性質(zhì)如下:
抽象方法是隱式的虛方法(用virtual 修飾方法的叫做虛方法)。
只允許在抽象類中使用抽象方法聲明,只要使用抽象方法,那么這個(gè)就是抽象類。
因?yàn)槌橄蠓椒暶鞑惶峁?shí)際的實(shí)現(xiàn),所以沒有方法體;方法聲明只是以一個(gè)分號(hào)結(jié)束,并且在簽名后沒有大括號(hào) ({ })。 例如:
public abstract void MyMethod();
實(shí)現(xiàn)由一個(gè)重寫方法override 提供,此重寫方法是非抽象類的一個(gè)成員。
在抽象方法聲明中使用 static 或 virtual 修飾符是錯(cuò)誤的,因?yàn)槌橄蠓椒ㄐ枰恢貙?,所以不能用static修飾,因?yàn)槌橄蠓椒ㄊ请[式的虛方法,所以不能用virtual修飾。
除了在聲明和調(diào)用語法上不同外,抽象屬性的行為與抽象方法一樣,屬性本質(zhì)上是方法。
在靜態(tài)屬性上使用 abstract 修飾符是錯(cuò)誤的。
在派生類中,通過包括使用 override 修飾符的屬性聲明,可以重寫抽象的繼承屬性。
virtual 關(guān)鍵字代表虛擬的,虛的,修飾的是方法。
修飾方法的時(shí)候:
這個(gè)時(shí)候叫做虛方法,虛方法代表這個(gè)方法是虛的,這個(gè)方法可能沒有實(shí)現(xiàn),這個(gè)方法可以被重寫。
關(guān)鍵的一句話是:這個(gè)方法可以被重寫。
這代表,如果這個(gè)方法想要被重寫,被override,那么它就必須是一個(gè)虛方法,因?yàn)閍bstract修飾的方法是隱式的虛方法,所以abstract和virtual 修飾的方法可以被override。
override 關(guān)鍵字代表重寫,修飾的是方法。
override 方法提供從基類繼承的成員的新實(shí)現(xiàn)。 由 override 聲明重寫的方法稱為重寫基方法。 重寫的基方法必須與 override 方法具有相同的簽名。
修飾方法的時(shí)候
1:不能重寫非虛方法或靜態(tài)方法。 重寫的基方法必須是 virtual、abstract 或 override 的。
override 方法和 virtual 方法必須具有相同的訪問級(jí)別修飾符。
2:您不能使用 new、static 或 virtual 修飾符來修改 override 方法。
3:重寫屬性聲明必須指定與繼承屬性完全相同的訪問修飾符、類型和名稱,并且被重寫的屬性必須
是 virtual、abstract 或 override 的。
new 關(guān)鍵字代表隱藏,修飾的是方法。
new 和override 的區(qū)別是,new 是隱藏父類方法,這就好比告訴別人,這個(gè)方法和父類的方法是兩個(gè)不同的方法,只是他們的簽名剛好相同罷了,override 則不同,override 告訴別人,以后用我的instance調(diào)用的就是我的方法,用父類的instance調(diào)用的就是父類的方法。
總結(jié)下:abstract,virtual,override,new 的關(guān)系。
override 的方法必須是abstract ,virtual, override 的。
abstract 的方法是隱式的virtual 方法。
virtual 的方法代表這個(gè)方法可以被重寫,當(dāng)然你也可以不重寫它。
abstract的方法代表這個(gè)方法是必須被重寫的方法。
new 的方法代表這個(gè)方法和父類的沒關(guān)系,是一個(gè)新的“new” 方法,只是剛好簽名相同罷了。
最后一道題
復(fù)制代碼 代碼如下:

class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B : A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class C : B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
class D : C
{
public override void F() { Console.WriteLine("D.F"); }
}
class Program2
{
static void Main()
{
D d = new D();
A a = d; B b = d;
C c = d; a.F(); b.F();
c.F();
d.F();
}
}

相關(guān)文章

  • C#枚舉類型與位域枚舉Enum

    C#枚舉類型與位域枚舉Enum

    這篇文章介紹了C#中的枚舉類型與位域枚舉Enum,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C# 泛型參數(shù)轉(zhuǎn)換

    C# 泛型參數(shù)轉(zhuǎn)換

    本文介紹了C# 泛型參數(shù)轉(zhuǎn)換的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • Winform界面中實(shí)現(xiàn)通用工具欄按鈕的事件處理方法

    Winform界面中實(shí)現(xiàn)通用工具欄按鈕的事件處理方法

    下面小編就為大家分享一篇Winform界面中實(shí)現(xiàn)通用工具欄按鈕的事件處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-11-11
  • C#?WPF?ListBox?動(dòng)態(tài)顯示圖片功能

    C#?WPF?ListBox?動(dòng)態(tài)顯示圖片功能

    這篇文章主要介紹了C#?WPF?ListBox?動(dòng)態(tài)顯示圖片,處理過程分為前臺(tái)代碼和后臺(tái)代碼,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 深入解析C#編程中struct所定義的結(jié)構(gòu)

    深入解析C#編程中struct所定義的結(jié)構(gòu)

    這篇文章主要介紹了C#編程中struct所定義的結(jié)構(gòu),與C++一樣,C#語言同時(shí)擁有類和結(jié)構(gòu),需要的朋友可以參考下
    2016-01-01
  • C#實(shí)現(xiàn)快速排序算法

    C#實(shí)現(xiàn)快速排序算法

    本文詳細(xì)講解了C#實(shí)現(xiàn)快速排序算法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#實(shí)現(xiàn)數(shù)字轉(zhuǎn)換漢字的示例詳解

    C#實(shí)現(xiàn)數(shù)字轉(zhuǎn)換漢字的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)數(shù)字轉(zhuǎn)換漢字功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#使用分部類設(shè)計(jì)實(shí)現(xiàn)一個(gè)計(jì)算器

    C#使用分部類設(shè)計(jì)實(shí)現(xiàn)一個(gè)計(jì)算器

    分部類是C#4.5中的一個(gè)新特性,它的出現(xiàn)使得程序的結(jié)構(gòu)更加合理,代碼組織更加緊密,本文將使用分部類設(shè)計(jì)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器,感興趣的小伙伴可以了解下
    2024-02-02
  • C#二維碼圖片識(shí)別代碼

    C#二維碼圖片識(shí)別代碼

    這篇文章主要為大家詳細(xì)介紹了C#二維碼圖片識(shí)別代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C#基于NPOI操作Excel

    C#基于NPOI操作Excel

    這篇文章介紹了C#基于NPOI操作Excel的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

兴仁县| 湘潭县| 哈尔滨市| 宁陵县| 新营市| 天峨县| 阿合奇县| 句容市| 明光市| 杭锦后旗| 宿迁市| 锦州市| 宝应县| 涞源县| 平定县| 清水县| 墨竹工卡县| 乐清市| 化德县| 左贡县| 马尔康县| 邛崃市| 唐河县| 金山区| 四子王旗| 买车| 吉木乃县| 凤冈县| 威远县| 合川市| 天长市| 哈密市| 班玛县| 襄城县| 尚志市| 雷波县| 房产| 义马市| 阿克苏市| 隆安县| 时尚|