国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#new關鍵字

2019-11-14 13:44:52
字體:
來源:轉載
供稿:網友

在 C# 中,new 關鍵字可用作運算符、修飾符或約束

1、new 運算符:用于創建對象和調用構造函數。
2、new 修飾符:用作修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。
3、new 約束:用于在泛型聲明中約束可能用作類型參數的參數的類型。

new關鍵字在我們的程序中可謂是無時不刻在用到,那么new關鍵字都可以用在哪些地方呢?考慮以下幾個問題:

1、new一個class對象和new一個struct或者new一個enum有什么不同?

   new一個class時,new完成2個內容:一是調用new obj命令為實例在托管堆中分配內存,二是調用構造函數實現對象初始化。

   new一個struct時,new運算符用于調用其構造函數,完成實例的初始化。

 

2、new在.NET中除了創建對象實例外,還可以做什么?

   new關鍵字:作為運算符可以創建對象和調用構造函數;

   作為修飾符可以用于向基類成員隱藏繼承成員,實現派生類中隱藏基類的virtual方法,不能和override共存;

   作為約束可以在泛型聲明中約束可能用作類型參數的參數類型,即new約束指定泛型類聲明中的任何類型參數都必須要有公共的無參構造函數;

   使用new關鍵字實現多態。

 

3、new運算符可以重載嗎?

   new運算符不可以重載。

 

4、泛型中new關鍵字的作用?

   new運算符用于返回一個引用,指向系統分配的托管堆的內存地址,new分配內存失敗,將引發OutOfMemoryException異常。

 

5、new一個繼承下來的方法和override有什么區別?

   new是隱藏基類方法,override是覆寫基類方法。如果要訪問new隱藏了的基類成員需要使用base關鍵字實現。

    隱藏和重寫基類方法的異同

    1:方法重寫:就是在基類中的方法用virtual關鍵字來標識,然后在繼承類中對該類進行重寫(override),這樣基類中的方法已經被重寫了,已經失去了功能了。當讓基類的對象的引用直接指向繼承類的對象時(多態性),調用該方法則是調用的繼承類的方法。

    2:方法隱藏:無論基類中的方法是否用了virtual關鍵字,繼承類中都可以用new關鍵字(如果不用new的話,不會產生錯誤,但會生成一個編譯警告)將基類中的方法隱藏,所謂隱藏就是隱藏,不像重寫,重寫就是原來的(基類中)已經不存在了,而隱藏是原來的還存在。所以當讓基類的對象的引用直接指向繼承類的對象時(多態性),調用該方法則是調用的基類的方法。

public class BaseClass    {        public void functionA()        {            Console.WriteLine("BaseFunctionA http://www.survivalescaperooms.com/sosoft/");        }        public virtual void functionB()        {            Console.WriteLine("BaseFunctionB http://www.survivalescaperooms.com/sosoft/");        }    }   public class DerivedClass:BaseClass    {        public new void functionA()        {            Console.WriteLine("DerivedFunctionA http://www.survivalescaperooms.com/sosoft/");        }        public override void functionB()        {            Console.WriteLine("DerivedFunctionB http://www.survivalescaperooms.com/sosoft/");        }    }

調用:
BaseClass baseFunction=new DerivedClass();baseFunction.functionA();baseFunction.functionB();

    得到的結果是:

    BaseFunctionA http://www.survivalescaperooms.com/sosoft/

    DerivedFunctionB http://www.survivalescaperooms.com/sosoft/

 

6、int i和int i = new int()有什么不同?

   new一個int時,new運算符用于初始化其值為0,使構造函數完成更優越的初始化操作。


通過繼承隱藏名稱采用下列形式之一:

•引入類或結構中的常數、指定、屬性或類型隱藏具有相同名稱的所有基類成員。

•引入類或結構中的方法隱藏基類中具有相同名稱的屬性、字段和類型。 同時也隱藏具有相同簽名的所有基類方法。

•引入類或結構中的索引器將隱藏具有相同名稱的所有基類索引器。

 

 

 

疑問:new隱藏的應用場景?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 望都县| 阿荣旗| 衡阳县| 沧源| 和政县| 灵寿县| 紫阳县| 当雄县| 新巴尔虎左旗| 张家界市| 枞阳县| 蒲城县| 密山市| 洪泽县| 东平县| 花垣县| 日照市| 兰西县| 原平市| 曲沃县| 安庆市| 玉龙| 奉节县| 武义县| 灌南县| 合肥市| 阳东县| 长子县| 永新县| 泽库县| 双江| 临清市| 盐亭县| 新巴尔虎右旗| 景德镇市| 济源市| 民和| 平定县| 栾川县| 乐至县| 慈溪市|