[英]How do I hide a base class property in C#?
我在一個類中具有以下屬性:
protected Int32 MyProperty { get; set; }
在派生類中,我想用:
protected Long MyProperty {get ;set; }
使用new
關鍵字執行此操作的唯一方法是可以隱藏基類屬性嗎?
覆蓋必須與覆蓋的簽名相同,因此您不能更改字段的類型。
除了嘗試以這種方式覆蓋之外,另一種選擇是使您的類通用。
public abstract class MyClass<T>
{
public T MyValue{ get; set;}
}
public class MyIntClass : MyClass<int>
{}
public class MyLongClass : MyClass<long>
{}
您並沒有覆蓋MyInt
字段,而是創建了一個新字段,必須通過該字段指定new
:
protected new Long MyInt = 0;
如果您的代碼將訪問該類作為基類的實例,則它將以Int32
訪問;如果您直接調用子類,則它將以Long
訪問:
public class MyClass
{
protected int MyValue = 0;
}
public class MySubclass : MyClass
{
protected new long MyValue = 0;
}
void Test()
{
MyClass instance = new MyClass();
instance.MyValue = 10; // int
MySubclass instance2 = new MySubclass();
instance2.MyValue = 10; // long
MyClass instance3 = (MyClass)instance2;
int value = instance3.MyValue; // int - value is 0.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.