如何访问存储在基类列表中的派生类中的属性



我正在尝试使用所有来自同一基类的对象列表。

有我的基本类型(问题(和派生类型(3TQ、2TQ(

根据具体情况,列表将全部属于一种或其他派生类型。

所以我所有的接口都处理基本类型问题的列表。

但是一旦我掌握了列表,我就无法访问派生类型。

长话短说 - 如何从基本对象列表中提取可用的派生对象? 我觉得这应该很容易,而且我错过了一些非常明显的东西。

你必须使用显式强制转换,代码看起来像这样,

这是从类 Base 派生的子类。

子项 c = 新子项((;

UpCast 可以隐式完成,没有任何问题

基数 b = c;

需要显式转换才能将对象转换回派生对象。
儿童 c1 = (儿童( b;

现在,由于这是运行时操作,因此在转换不正确的情况下不会出错,因此始终在转换前进行检查。 您可以使用"is"或"as"关键字, 以下是将为您提供更多详细信息的链接。

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/as

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/is

希望这有帮助

我想我明白你的意图。您可以在基类中定义虚拟方法,并在您提到的两个派生类中重写 (这肯定能够访问特定于该类的属性。这些重写的方法可能还需要返回使用代码所依赖的某些内容。可能下面的代码片段可以帮助您可视化:

public class MyBaseClass
    {
        public virtual int MyMethod()
        {
            return default(int);
        }
    }
public class MyDerivedClass1:MyBaseClass
{
    public int MyProperty1 { get; set; }
    public override int MyMethod()
    {
        return MyProperty1;
    }
}
public class MyDerivedClass2 : MyBaseClass
{
    public int MyProperty2 { get; set; }
    public override int MyMethod()
    {
        return MyProperty2;
    }
}
public class MyConsumer
{
    List<MyBaseClass> baselist = new List<MyBaseClass>
    {
        new MyDerivedClass1 {MyProperty1=2 },
        new MyDerivedClass2 {MyProperty2=5 }
    };
    public void TestMethod()
    {
        foreach(var item in baselist)
        {
            var x = item.MyMethod();
            /* take care of your actual logic here*/
        }
    }

最新更新