.NET 4.x Одинаковые методы в разных классах - вопрос оптимальной реализации - C#

Узнай цену своей работы

Формулировка задачи:

Есть 2 класса которые наследуются от одного интерфейса (т.е. есть общие поля и некоторые методы) вот насчет методов у меня затык, эти методы должны быть в обоих классах (если они конечно же описаны в интерфейсе) но делают они одно и то же, смысл писать одинаковый код? Как бы извернуться что бы определенные методы описать в одном месте? Если очень приблизительно и очень упрощенно то вот, для наглядности что я имею ввиду:
 public interface ICommon {
    int i { get; set; }
    int a { get; set; }
    int Method1();
  }
 
  public class class1 :ICommon {
    public int i { get; set; }
    public int a { get; set; }
 
    public int Method1() {
      return this.i + this.a;
    }
    public void Method2() {
      
    }
  }
 
  public class class2 :ICommon {
    public int i { get; set; }
    public int a { get; set; }
 
    public int Method1() {
      return this.i + this.a;
    }
    public void Method3() {
 
    }
  }
 
  class Program {
    static void Main(string[] args) {
      ICommon instance;
      if(true /*рак свистнул*/)
        instance = new class2();
      else
        instance = new class1();
 
      // и не важно какой класс будет, Method1 мы все равно выполним
      instance.Method1();
    }
    
  }
И все хорошо, единственное плохо что код метода дублируется в обоих классах. Если бы методы можно было объявлять в интерфейсе, проблем не было б, но этого делать нельзя ) Единственное что на ум приходит это сделать еще 1 статический класс и описать эти методы в нем
 public interface ICommon {
    int i { get; set; }
    int a { get; set; }
  }
 
  public static class AddClass {
    public static int Method1(ICommon obj) {
      return obj.a + obj.i;
    }  
  }
 
  public class class1 :ICommon {
    public int i { get; set; }
    public int a { get; set; }
 
    public void Method2() {
      
    }
  }
 
  public class class2 :ICommon {
    public int i { get; set; }
    public int a { get; set; }
 
    public void Method3() {
 
    }
  }
 
  class Program {
    static void Main(string[] args) {
      ICommon instance;
      if(true /*рак свистнул*/)
        instance = new class2();
      else
        instance = new class1();
 
      // и не важно какой класс будет, Method1 мы все равно выполним
      AddClass.Method1(instance);
    }
    
  }
в данном примере как бы норм т.к. очень упрощенно, но не очень хотелось бы создавать статический класс и в методы передавать инстансы классов. Может можно как-то по другому?

Решение задачи: «.NET 4.x Одинаковые методы в разных классах - вопрос оптимальной реализации»

textual
Листинг программы
public abstract class class0 :ICommon {
    public int i { get; set; }
    public int a { get; set; }
 
    public virtual int Method1() {
      return this.i + this.a;
    }
  }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы