几个 类 在 C# 中共享相同属性的最佳方式
Best way for several classes to share the same attributes in C#
我已经看到一些实现此属性共享的方法,从最基本的(每个参数传递属性)到接口(这是迄今为止我发现的最干净的方法),但想知道是否还有其他方法,甚至可能更好,因为我正在重构我的主要 class 并且希望避免长时间再次这样做。
问题如下,我有一个妈妈class,有几个children,但是根据公司的需要,正在创建其他children和一些方法children传给了妈妈,今天妈妈已经有15个属性和60多个方法,可以完美地分为classes.
我的 class 是这些我并不引以为豪的困惑的怪物,所以你应该明白她为什么为重构而哭泣:
public class A
{
protected Form myForm = new Form();
protected WebBrowser myBrowser = new WebBrowser();
protected List<ComplexType1> List1 = new List<ComplexType1>();
protected List<ComplexType2> List2 = new List<ComplexType2>();
protected List<ComplexType3> List3 = new List<ComplexType3>();
protected List<ComplexType4> List4 = new List<ComplexType4>();
protected ComplexType5 myData;
// And more attribute ...
public A() { }
protected virtual void Method1() {}
protected virtual void Method2() {}
protected virtual void Method3() {}
protected virtual void Method4() {}
protected virtual void Method5() {}
// And more and more methods ...
}
public class B : A
{
protected ComplexType6 anotherData;
public B() : base() {}
protected override void Method3() {}
protected override void Method4() {}
protected virtual void Method6() {}
}
public class C : A
{
public C() : base() {}
protected override void Method1() {}
protected virtual void Method6() {}
protected virtual void Method7() {}
}
// And more and more child classes ...
从外观上看,您的 class 已经被许多其他 class 继承了。
解决巨大 class 并结合继承的最佳方法是避免它。
这两种情况你都会遇到很多问题,如果你有太多基于它的功能 class 你一定要修改它。修改基础 class 将影响所有派生的 classes 并且您将很难跟踪和测试它。再加上共享变量,你就不知道是基class更新了还是派生class更新了
我建议将基础 class 分解为更小的 classes 以获得密切相关的功能。更喜欢组合而不是继承。这将减少您的 member/variable 共享并获得易于管理的代码。
我已经看到一些实现此属性共享的方法,从最基本的(每个参数传递属性)到接口(这是迄今为止我发现的最干净的方法),但想知道是否还有其他方法,甚至可能更好,因为我正在重构我的主要 class 并且希望避免长时间再次这样做。
问题如下,我有一个妈妈class,有几个children,但是根据公司的需要,正在创建其他children和一些方法children传给了妈妈,今天妈妈已经有15个属性和60多个方法,可以完美地分为classes.
我的 class 是这些我并不引以为豪的困惑的怪物,所以你应该明白她为什么为重构而哭泣:
public class A
{
protected Form myForm = new Form();
protected WebBrowser myBrowser = new WebBrowser();
protected List<ComplexType1> List1 = new List<ComplexType1>();
protected List<ComplexType2> List2 = new List<ComplexType2>();
protected List<ComplexType3> List3 = new List<ComplexType3>();
protected List<ComplexType4> List4 = new List<ComplexType4>();
protected ComplexType5 myData;
// And more attribute ...
public A() { }
protected virtual void Method1() {}
protected virtual void Method2() {}
protected virtual void Method3() {}
protected virtual void Method4() {}
protected virtual void Method5() {}
// And more and more methods ...
}
public class B : A
{
protected ComplexType6 anotherData;
public B() : base() {}
protected override void Method3() {}
protected override void Method4() {}
protected virtual void Method6() {}
}
public class C : A
{
public C() : base() {}
protected override void Method1() {}
protected virtual void Method6() {}
protected virtual void Method7() {}
}
// And more and more child classes ...
从外观上看,您的 class 已经被许多其他 class 继承了。
解决巨大 class 并结合继承的最佳方法是避免它。
这两种情况你都会遇到很多问题,如果你有太多基于它的功能 class 你一定要修改它。修改基础 class 将影响所有派生的 classes 并且您将很难跟踪和测试它。再加上共享变量,你就不知道是基class更新了还是派生class更新了
我建议将基础 class 分解为更小的 classes 以获得密切相关的功能。更喜欢组合而不是继承。这将减少您的 member/variable 共享并获得易于管理的代码。