new是怎麼用的?

2021-05-28 03:27:55 字數 2437 閱讀 8106

new 嘛 

例項化乙個類。

比如有乙個類叫汽車。你現在想在程式中買一輛,所以你用new來買了一輛汽車,這輛車你得給你找個名字,比如寶馬。呵呵所以就成

汽車 寶馬 = new 汽車

你有錢了,你要再來一輛

汽車 賓士 = new 汽車

但他們都有汽車該有的東西:四個輪子,乙個方向盤,發動機,車門。所以都是汽車一類的東西。

你看來還沒有理解c#的本質,可以這樣,c#所有東西全都是類,乙個繼承另乙個,子類繼承父類。

連string都是個類。申明乙個字串變數,就是例項化乙個string類。

例項化類這個嘛不是c#才有問題,是物件導向的問題。

乙個包裝好了的功能的**塊就可以作為乙個類。但你不能直接用它,因為物件導向概念中是不允許隨便修改類的內容的。要用你就要例項化。就像汽車這個類。你要用行,但你不能改了汽的一些基本性質上的東西。比如你不能讓四個輪子變成只有兩個。你不能卻掉方向盤。但是你不甘心啊,所以你例項化了,系統就給你乙個類似於汽車映象一樣的汽車,他有了汽車通有的東西。你自己給他乙個名字,以後你就可以隨意讓車開開停停,改改裝裝,你說我要加一排燈行,你可以加在你的例項上,但不要加到類上,因為你一加到類上了,別人例項化了的汽車也有一排的燈了,人家又不喜歡怎麼辦呢。

其實你申明字串變數的時候一般沒有用到new因為這種東西有點兒不一樣,系統准許你不用new來宣告,直接用

string 變數名

就行了

但用new也沒有錯,一樣是可以的。

c#就是有強大的類庫,什麼意思呢,就是基本上所有你要完成的程式都可以用c#類庫(有很多很多類),例項化你要用的。拼起來就行了。絕大多數類還是要用new的。

在 c# 中,new 關鍵字可用作運算子或修飾符。

new 運算子 用於在堆上建立物件和呼叫建構函式。

new 修飾符 用於隱藏基類成員的繼承成員。

new 運算子

1.用於建立物件和呼叫建構函式

例:class_test myclass = new class_test();

2.也用於為值型別呼叫預設的建構函式

例:int myint = new int();

myint 初始化為 0,它是 int 型別的預設值。該語句的效果等同於:int myint = 0;

3.不能過載 new 運算子。

4.如果 new 運算子分配記憶體失敗,則它將引發 outofmemoryexception 異常。

new 修飾符

使用 new 修飾符顯式隱藏從基類繼承的成員。若要隱藏繼承的成員,請使用相同名稱在派生類中宣告該成員,並用 new 修飾符修飾它。

請看下面的類:

public class myclass }

在派生類中用 invoke 名稱宣告成員會隱藏基類中的 invoke 方法,即:

public class myderivedc : myclass }

但是,因為字段 x 不是通過類似名隱藏的,所以不會影響該欄位。

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

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

2.引入類或結構中的方法隱藏基類中具有相同名稱的屬性、欄位和型別。同時也隱藏具有相同簽名的所有基類方法。

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

4.在同一成員上同時使用 new 和 override 是錯誤的。

注意:在不隱藏繼承成員的宣告中使用 new 修飾符將生成警告。

示例 在該例中,基類 mybasec 和派生類 myderivedc 使用相同的欄位名 x,從而隱藏了繼承欄位的值。該例說明了 new 修飾符的使用。同時也說明了如何使用完全限定名訪問基類的隱藏成員。

using system;

public class mybasec

public class myderivedc : mybasec }

輸出 100

55 22

如果移除 new 修飾符,程式將繼續編譯和執行,但您會收到以下警告:

the keyword new is required on 'myderivedc.x' because it hides inherited member 'mybasec.x'.

如果巢狀型別正在隱藏另一種型別,如下例所示,也可以使用 new 修飾符修改此巢狀型別。

示例 在該例中,巢狀類 myclass 隱藏了基類中具有相同名稱的類。該例不僅說明了如何使用完全限定名訪問隱藏類成員,同時也說明了如何使用 new 修飾符消除警告訊息。

using system;

public class mybasec }

public class myderivedc : mybasec

public static void main() }

輸出 100

200

物件到底是怎麼new出來的

前言 要想理解本文,必須先了解jvm的記憶體結構 一.建立物件的方式二.建立物件的步驟 物件在jvm中怎麼儲存?判斷物件的類是否載入,沒載入進行載入 為物件分配記憶體空間 處理併發的問題 使用tlab或者cas保證原子性 初始化分配到的空間 給所有的屬性賦初始值 設定物件頭 執行init方法 執行 ...

什麼是Redis?怎麼用的?

整個redis就相當於乙個大的hashmap string 在redis中字串型別的value最多可以容納的資料長度是512m hash redis中的hash型別可以看成具有string key和string value的map容器,每乙個hash可以儲存4294967295個鍵值對。key是相當...

該怎麼用 new 來分配多維陣列?

有很多方法,端視你對陣列大小的伸縮性之要求而定。極端一點的情形,如果你在編譯期就知道所有陣列的維度,你可以靜態地配置 就像 c 一樣 class fred void manipulatearray 另乙個極端情況,如果你希望該矩陣的每個小塊都能不一樣大,你可以在自由記憶體裡配置之 void mani...