如何在不使用 C# 中的接口的情况下,在另一个 class 中使用在两个不同的 class 中声明的列表?

How can I use a list declared in two different classes in another class, without using interface in C#?

我有两个类似的classes A和B,包含以下代码:

//A or B depending on class
public class LogicA
    {
        public List<Members> MembersA { get; set; } = new List<Member>();

        public void AddMember(Member member)
        {
            MembersA.Add(member);
        }

        public List<Member> GetResultA()
        {
            return MembersA;
        }

    }

我想在另一个 class(比如 logicC)中使用 MembersA 和 MembersB 列表。 我见过类似的问题,它们大多涉及单一继承。我想使用的过程是通过多重继承从第三个 class 中的两个不同 classes 创建列表实例,但在 C# 中,只有接口支持多重继承,我正在使用 class es,因此我的问题。

有什么理由只需要使用继承吗?

一般Class成员的使用方式如下

class logicC
{
  static void Main(string[] args)
  {
    LogicA logicA = new LogicA();
    LogicB logicB = new LogicB();

    List<Member> memberA =  logicA.memberA;
    List<Member> memberB =  logicB.memberB;
 }
}

您可以为您的方法使用 static 修饰符,例如:

public static class LogicA
{
    public static List<Members> MembersA { get; set; } = new List<Member>();

    public static void AddMember(Member member)
    {
        MembersA.Add(member);
    }

    public static List<Member> GetResultA()
    {
        return MembersA;
    }

}

并像这样使用它:

using YourProject;

public class LogicC
{
   Members members = new();
   List<Members> membersList = new();
   LogicA.AddMember(member);
   membersList = LogicA.GetResult();
}

Logica.GetResultA 和大概 LogicB.GetResultB return List<Member>。所以没有问题

逻辑C可以

class LogicC{
   void NoodleOnList(List<Member> input){
       ....
   }
}

然后

   LogicC lc;
   lc.NoodelOnList(la.GetMembersA());
   lc.NoodelOnList(lb.GetMembersb());

那么,您应该 re-consider 您的设计选择并考虑如何使您的代码不易更改

您可以创建一个新的 class 来聚合来自 A、B 的列表。并且通过组合,这个新的 class 可以访问来自其他内部对象的列表。

public class logicC {
   public LogicA logicA;
   public LogicB logicB;

   public List<Member> GetResultC() => logicA.GetResultA().Concat(logicB.GetResultB());
}