![](/img/trans.png)
[英]Cannot animate the color property because the object is sealed or frozen
[英]Cannot be sealed because it's not an override
我有以下課程:
namespace Warnings
{
public abstract class BaseWarningIntField : IWarningInnerDataField
{
public string PropName;
public string HeaderCaption;
public sealed WarningInnerDataType DataType
{
get { return WarningInnerDataType.Integer; }
}
}
}
我希望最后一個屬性DataType
不可覆蓋,因為它是Integer類型的warning-detail字段的基類,所以它需要始終返回正確的類型WarningInnerDataType.Integer
。
無論如何,編譯器給我以下錯誤:
'Warnings.BaseWarningIntField.DataType'無法密封,因為它不是覆蓋
但是,據我所知, override
與我想要實現的完全相反。
在C#
,默認情況下所有方法都是非虛擬的。 您不能覆蓋子類中的非虛方法。 因此,像往常一樣離開財產將使您免受子類覆蓋它的影響。
Sealed
是繼承限制的類聲明中使用的關鍵字,或用於停止類層次結構的成員的虛擬鏈。 但同樣 - 這與虛擬方法和屬性有關。
試圖覆蓋子類中的“普通”屬性將導致編譯錯誤
'WarningIntField.DataType.get':無法覆蓋繼承的成員'BaseWarningIntField.DataType.get',因為它未標記為虛擬,抽象或覆蓋
為了回答你的評論,我將提供一些代碼示例來說明我的觀點。 實際上,您無法限制派生類隱藏方法或屬性。 所以下一個情況是合法的,沒有辦法克服它(這與用new
關鍵字表示的虛方法和方法有關)
class BaseClass
{
public string Property {get; set;}
}
class DerivedClass : BaseClass
{
//compiler will give you a hint here, that you are hiding a base class prop
public string Property {get; set;}
}
同樣地,您不能限制通過局部變量隱藏類中的字段,因此這種情況也是有效的。 請注意,編譯器還可以幫助您注意,您正在通過局部變量隱藏類字段。 這也與readonly
const
和簡單的static
字段有關。
int field = 0; //class field
void Foo()
{
int field = 0; //local variable
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.