gpt4 book ai didi

c# - 继承对象列表

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:13 25 4
gpt4 key购买 nike

我有一个非常基本的问题:继承。我对此很陌生。

我有一个基类:

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] 的监 window 口或对象资源管理器中,我可以看到 prop1,但是如果我键入 Data[0].prop1,它告诉我 prop1 不存在。我猜这是因为我有 Data 作为 base1 的列表,而不是派生类,但我该如何实现呢?我的最终目标是让 usageclass 拥有一个属于不同对象的 List 类型的属性,我的想法是让它们从相同的基类派生可以允许这。以及为什么我能够在对象资源管理器中看到所有内容,但在输入时却看不到。

谢谢!

最佳答案

这是交易,让我们用具体的东西来玩这个。

  1. 您有一份动物 list 。

  2. 你加了一只 Frog 和一只猫

  3. 然后您尝试设置第一个动物的爪子属性。

怎么会有人知道这是一只猫?很可能不会。

您需要测试派生类型,并进行相应的转换

类型转换

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 运算符匹配的模式 C# 7.0+

expr is type varname

if(someRandomAnimal is Cat cat)
cat.Claws = 4;

关于c# - 继承对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57682939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com