抽象类演员表问题

时间:2019-12-05 06:50:38

标签: c# abstract-class

我有此代码:

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属性null投射到Animal上?

如果我要将对象投射到Animal,该如何解决?如何保留属性值?

2 个答案:

答案 0 :(得分:3)

您期望的结果由override实现,因此您必须覆盖属性:

public override string Name { get; set; }

但是要这样做,您需要将该属性标记为abstract,否则会出现错误:

  

错误CS0506:“ Dog.Name”:无法覆盖继承的成员“ Animal.Name”,因为未将其标记为虚拟,抽象或覆盖

Refer to this post.您可以在其中阅读:

  

重写修饰符可用于虚拟方法,并且必须用于抽象方法。这指示编译器使用方法的最后定义的实现。即使该方法是在对基类的引用上调用的,它也会使用覆盖它的实现。

答案 1 :(得分:1)

 $( function() {
  $( "#resizable" ).resizable();
 });

<div id="resizable" class="ui-widget-content">
  <h3 class="ui-widget-header">Resizable</h3>
</div>