.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;
}
}