Два класса, которые очень похожи, я хочу передать один или другой в метод - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть два класса, рассмотрим следующее:

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, и если bool имеет значение true, тогда используйте Class1, иначе используйте Class2, и в зависимости от этого логического значения я хочу передать этот метод. Я не хочу создавать отдельный метод, так как думаю, что это будет лучше всего сделать.

Я не уверен, как этого добиться.

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

вы можете попробовать что-то вроде этого:

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

        if (MyObject.GetType() == typeof(Class2))
        {
            //   (MyObject as Class2 )
        }
    }
0 голосов
/ 09 ноября 2018

Просто я предпочитаю делать интерфейсы, а не наследовать, если могу. Позволяет быть немного более гибким, я думаю, в будущем.

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();
    }
 }
0 голосов
/ 09 ноября 2018

Используйте базовый класс с общими свойствами.

Классы наследуются от него с помощью реализации метода 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...