簡體   English   中英

抽象類轉換問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM