c# - 继承对象列表
问题描述
我有一个非常基本的问题:继承。我是新来的。
我有一个基类:
public class base1
{
public int common {get; set;}
}
我有一堆派生类,其中两个是
public class derived1 : base1
{
public int prop1 {get; set;}
}
和
public class derived2 : base1
{
public int prop2 {get; set;}
}
我想像这样在第三类中使用它们,但出现错误:
public class usageclass
{
public List<base1> Data;
public usageclass()
{
Data = new List<base1>();
derived1 d1 = new derived1();
d1.common = 0;
d1.prop1 = 1;
Data.Add(d1);
derived2 d2 = new derived2();
d2.common = Data[0].common + 10;
d2.prop2 = Data[0].prop1 + 10; //<--- this line doesn work. see below.
Data.Add(d2);
}
}
在指向的监视窗口或对象资源管理器中Data[0]
,我可以看到prop1
,但是如果我键入Data[0].prop1
,它会告诉我prop1
不存在。我猜这是因为我有Data
一个列表base1
,而不是派生类,但是我该如何实现呢?我的最终目标是usageclass
拥有一个List
属于不同对象类型的属性,我的想法是让它们派生自同一个基类可以实现这一点。为什么我可以在对象资源管理器中看到所有内容,但在输入时却看不到。
谢谢!
解决方案
这是交易,让我们用具体的东西来玩这个。
你有一份动物清单。
你加了一只青蛙和一只猫
然后你尝试设置第一只动物的爪属性。
怎么会有人知道它是猫?很有可能不会。
您将需要测试派生类型,并相应地进行转换
投掷
var cat = (Cat)someRandomAnimal; // if it's not a cat you will get a run-time error
作为运营商
var cat = someRandomAnimal as cat;
if (cat != null)
cat.Claws - 4;
是运算符
if(someRandomAnimal is Cat)
((Cat)someRandomAnimal).Claws = 3;
与 is operator C# 7.0+匹配的模式
expr 是类型 varname
if(someRandomAnimal is Cat cat)
cat.Claws = 4;
推荐阅读
- python - 如何检查输入的一部分 | Python
- python - 在 Pyomo 中解决为输入模型定义的多个活动目标
- laravel - 在方法中仅返回 Laravel 中选定列的实用方法
- php - PHP / SQL没有将数据插入表
- kubernetes - 如何使用 Ansible 的 community.kubernetes.k8s_info 模块等待 StatefulSet
- python - 了解 API 响应正文 - Plumber 和 Python
- mysql - 如何删除 MySQL 中的重复记录?
- operating-system - 如何找到iso、qcow2图像文件的操作系统?
- jenkins - 角色策略插件最新版本 3.1.1 不起作用
- amazon-web-services - 与私有子网中的 mySQL RDS 实例的 JDBC 连接