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

how to access properties in derived class stored in a list of the base class

我正在尝试处理所有来自同一基础的对象列表 class。

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

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

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

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

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

您将不得不使用显式转换,代码如下所示,

// 这是从 class Base 派生的 Child Class。

Child c = new Child();

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

基数 b = c;

//需要显式转换才能将 object 转换回派生。
Child c1 = (Child) b;

现在,由于这是运行时操作,如果转换不正确,您不会收到错误消息,因此在转换前一定要进行检查。您可以使用 "is" 或 "as" 关键字,下面的链接将为您提供更多详细信息。

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

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

希望对您有所帮助

我想我明白你的意思了。您可以在基础 class 中定义虚拟方法,并在派生的 class 中重写您提到的(这肯定能够访问特定于 class 的 属性 。这些重写的方法可能还需要 return 你的消费代码依赖于它的一些东西。下面的代码片段可能会帮助你形象化:

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*/
        }
    }