两个非常相似的类,我想将一个或另一个传递给方法

时间:2018-11-09 15:29:54

标签: c# interface

我有两个课程,请考虑以下内容:

public class Class1
{
   public int CustomerID;
   public int DriverID;
   public int EmployeeID;
}

public class Class2
{
   public int CustomerID;
   public int DriverID;
   public int EmployeeID;      
}

然后我想编写一个对这些方法中的任何一个都起作用的方法,但是我的程序要到运行时才知道哪个方法。

public void DoSomething(???)
{
  if (???.GetType() == typeof(Class1)
  {
    //do stuff related to class 1
  }

  if (???.GetType() == typeof(Class2)
  {
    //do stuff related to class 2
  }
}

考虑到它们是不同的类型,如何将这些类之一传递给该方法?然后,我需要检查类型以执行单独的操作。

在我的应用程序中将使用的方式是将Class1和Class2链接到ParentClass,并在该ParentClass上指示应使用哪个链接对象(Class1和Class2),例如ParentClass上会有一个布尔值,如果bool为true,则使用Class1,否则使用Class2,并且我想将布尔值传递给该方法。我不想创建一个单独的方法,因为我认为这样做是最好的。

我不确定如何实现这一目标。

3 个答案:

答案 0 :(得分:1)

使用具有共同属性的基类。

这些类通过方法DoSomeThing的实现从中派生。 然后,将自动为正确的类型调用方法DoSomeThing

public abstract BaseClass
{
   public int CustomerID;
   public int DriverID;
   public int EmployeeID;  
   public abstract void DoSomeThing();    
}

public abstract Class1
{
   public override void DoSomeThing(){}
}

public abstract Class
{
   public override void DoSomeThing(){}
}

public void DoSomething(BaseClass class)
{
    class.DoSomeThing();
}

答案 1 :(得分:0)

如果可以的话,我的首选是在继承上进行接口。我认为以后可以灵活一些。

public static void DoSomething(IDoSomething MyObject)
{
    MyObject.DoSomeMethod();
 }
 interface IDoSomething
 {
    void DoSomeMethod();
 }
 public class Class1 : IDoSomething
 {
    public int CustomerID;
    public int DriverID;
    public int EmployeeID;

     public void DoSomeMethod()
     {
            throw new NotImplementedException();
     }
 }

 public class Class2 : IDoSomething
 {
    public int CustomerID;
    public int DriverID;
    public int EmployeeID;

    public void DoSomeMethod()
    {
      throw new NotImplementedException();
    }
 }

答案 2 :(得分:-2)

您可以尝试以下方式:

    public static  void DoSomething(object MyObject)
    {
        if (MyObject.GetType() == typeof(Class1))
        {
            //   (MyObject as Class1 )
        }

        if (MyObject.GetType() == typeof(Class2))
        {
            //   (MyObject as Class2 )
        }
    }