C# 使用属性将派生类成员变量引用到基类成员变量

C# 使用属性将派生类成员变量引用到基类成员变量,c#,inheritance,properties,C#,Inheritance,Properties,我当前的代码看起来有点像这样 class BaseClass2 { public List<BaseClass1> list { get; set; } } class DerivedClass2 : BaseClass2 { public DerivedClass1A objA { get; set; } public DerivedClass1B objB { get; set; } } 类BaseClass2 { 公共列表{get;set;} }

我当前的代码看起来有点像这样

class BaseClass2
{
    public List<BaseClass1> list { get; set; }
}

class DerivedClass2 : BaseClass2
{
    public DerivedClass1A objA { get; set; }
    public DerivedClass1B objB  { get; set; }
}
类BaseClass2
{
公共列表{get;set;}
}
类DerivedClass2:BaseClass2
{
公共派生类别a objA{get;set;}
公共派生的Class1B对象jb{get;set;}
}
我有一个DerivedClass2,我知道基类中列表的类型,我知道会有两种类型的DerivedClass1A和DerivedClass1B

我可以如上所述创建新变量,但我不希望使用内存,而是巧妙地访问和设置原始列表,我该如何做到这一点

谢谢

您可以使用泛型:

class BaseClass2<T>
  T : BaseClass1
{
    public List<T> list { get; set; }
}

class DerivedClass2 : BaseClass2<BaseClass1>
{
    public DerivedClass1A objA { get; set; }
    public DerivedClass1B objB  { get; set; }
}

你是说像这样的事吗

class DerivedClass2 : BaseClass2
{
    public DerivedClass1A objA
    {
        get
        {
            return (DerivedClass1A)base.list[0];
        }
        set
        {
            base.list[0] = value;
        }
    }

    public DerivedClass1B objB
    {
        get
        {
            return (DerivedClass1B)base.list[1];
        }
        set
        {
            base.list[1] = value;
        }
    }
}

但这不是一个好的设计。。。你为什么会有这个名单?你到底想干什么?

这根本改变不了他的处境。我同意。我想我们的一个答案会有所帮助。不管怎样,如果他告诉我们实际情况,我打赌有更好的方法。你确定列表中只有两个元素吗?@JakubKonecki没有。我说这是件坏事。但这是一个如何做我理解他想要的事情的例子。是的,有两个要素。这就是我要说的,只要想想这是否符合我的要求……这些属性会有单独的存储数据值吗?如果没有,是否有办法做到这一点?它们将没有存储的数据值。当调用get或set时,它们将访问基类的list属性处的元素。您可以尝试在集合的开头调试和设置断点,并很好地了解这是如何进行的。
class DerivedClass2 : BaseClass2
{
    public DerivedClass1A objA
    {
        get
        {
            return (DerivedClass1A)base.list[0];
        }
        set
        {
            base.list[0] = value;
        }
    }

    public DerivedClass1B objB
    {
        get
        {
            return (DerivedClass1B)base.list[1];
        }
        set
        {
            base.list[1] = value;
        }
    }
}