c# - 抽象类转换问题
问题描述
我有这个代码:
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
?如何保持属性值?
解决方案
您所期望的由 实现override
,因此您必须覆盖属性:
public override string Name { get; set; }
但是为了做到这一点,你需要将该属性标记为abstract
,否则你会得到一个错误:
错误 CS0506:“Dog.Name”:无法覆盖继承的成员“Animal.Name”,因为它未标记为虚拟、抽象或覆盖
参考这篇文章。在那里你可以阅读:
override 修饰符可以用在虚方法上,而且必须用在抽象方法上。这表明编译器使用方法的最后定义实现。即使在对基类的引用上调用该方法,它也会使用覆盖它的实现。
推荐阅读
- elixir - 如何在 Elixir 中获得二进制文件的长度?
- android - 如何在应用程序内获取 Firebase 云消息,而不是推送通知
- genexus - 单独工作面板
- powerbi - 拉取对应于最大值或最小值的行的最佳方法
- javascript - 注入 DOM 后如何使用 API 处理 Wistia 视频
- javascript - 猫鼬 findOneAndUpdate 为 err 和 doc 返回 null(使用 Jest)
- tfs - 如何查看我在 VSTS 项目中所做的更改?
- php - Laravel CSV 导入 - 我可以使用请求验证吗?
- intellij-idea - 使用 IntelliJ Idea 和 SonarLint 连接到 SonarQube 服务器时出现错误
- php - 一个while循环中有两个查询