C#的new關鍵字的幾種用法
阿新 • • 發佈:2018-11-12
一共有三種用法:
在 C# 中,new 關鍵字可用作運算子、修飾符或約束。
1)new 運算子:用於建立物件和呼叫建構函式。這種大家都比較熟悉,沒什麼好說的了。
2)new 修飾符:在用作修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。
3)new 約束:用於在泛型宣告中約束可能用作型別引數的引數的型別。
直接上程式碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NewTest
{
/*
* a) 作為運算子用來建立一個物件和呼叫建構函式。
* b) 作為修飾符。
* c) 用於在泛型宣告中約束可能用作型別引數的引數的型別。
*
*/
class A
{
public A() { }
public int data;
public int Data { get { return data; } set { data = value; } }
public int Data1 { get; set ; }
public virtual void Get()
{
Console.WriteLine("AAAAAAA");
}
}
class B : A
{
public B():base() { }
new public int data;
new public int Data { get; set; }
new public int Data1 { get; set; }
new public void Get ()
{
Console.WriteLine("BBBBBBB");
}
}
class C<T> where T:new()
{
}
class Program
{
static void Main(string[] args)
{
B b = new B();
b.data = 10;
b.Data = 12;
b.Data1 = 13;
Console.WriteLine($"B:::data:{b.data},Data:{b.Data},Data1:{b.Data1}");
b.Get();
A a = b ;
Console.WriteLine($"A:::data:{a.data},Data:{a.Data},Data1:{a.Data1}");
a.data = 100;
a.Data = 120;
a.Data1 = 130;
Console.WriteLine($"A:::data:{a.data},Data:{a.Data},Data1:{a.Data1}");
a.Get();
Console.WriteLine($"B:::data:{b.data},Data:{b.Data},Data1:{b.Data1}");
b.Get();
C<B> c = new C<B>();
}
}
}
結果:
b斷點除錯結果:
這裡說明下,重寫父類的變數其實是重新定義了一個新的變數,變數名相同是把父類的變數隱藏了,會增加記憶體
參考文章:
C#的new關鍵字的幾種用法