.NET 4.x Одинаковые методы в разных классах - вопрос оптимальной реализации - C#
Формулировка задачи:
Есть 2 класса которые наследуются от одного интерфейса (т.е. есть общие поля и некоторые методы)
вот насчет методов у меня затык, эти методы должны быть в обоих классах (если они конечно же описаны в интерфейсе) но делают они одно и то же, смысл писать одинаковый код?
Как бы извернуться что бы определенные методы описать в одном месте?
Если очень приблизительно и очень упрощенно то вот, для наглядности что я имею ввиду:
И все хорошо, единственное плохо что код метода дублируется в обоих классах.
Если бы методы можно было объявлять в интерфейсе, проблем не было б, но этого делать нельзя )
Единственное что на ум приходит это сделать еще 1 статический класс и описать эти методы в нем
в данном примере как бы норм т.к. очень упрощенно, но не очень хотелось бы создавать статический класс и в методы передавать инстансы классов. Может можно как-то по другому?
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(); } }
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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д