[英]Abstract class cast issue
我有這個代碼:
public abstract class Animal
{
public string Name { get; set; }
}
public class Dog : Animal
{
[JsonProperty("name")]
public new string Name { get; set; }
}
public static void Main()
{
var dog = new Dog
{
Name = "Spark"
};
Console.WriteLine(dog.Name);
Console.WriteLine(((Animal)dog).Name == null);
}
這將輸出:
Spark
True
為什么將Name
屬性轉換為Animal
時為null
?
如果我想將我的對象投射到Animal
,如何解決它? 如何保留屬性值?
您期望的內容由override
實現,因此您必須覆蓋屬性:
public override string Name { get; set; }
但是為了做到這一點,您需要將該屬性標記為abstract
,否則您將收到錯誤消息:
錯誤 CS0506:“Dog.Name”:無法覆蓋繼承的成員“Animal.Name”,因為它未標記為虛擬、抽象或覆蓋
參考這個帖子。 在那里你可以閱讀:
override 修飾符可用於虛擬方法,並且必須用於抽象方法。 這表明編譯器使用方法的最后定義的實現。 即使在對基類的引用上調用該方法,它也會使用覆蓋它的實現。
public class Dog : Animal
{
string name = null;
public new string Name { get { return name; } set { name = value; base.Name = name; } } }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.