我有此代码:
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
,该如何解决?如何保留属性值?
答案 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>