我有一堆数据要在一个类中实例化,并且对于每个变量,我想确保还定义了一组特定的方法。IE:
[TypeA] VarA
[TypeB] VarB
[TypeC] VarC
FA1() which is a function of VarA and VarB
FA2() which is a function of VarA and VarC
FB1() which is a function of VarB and VarA
FB2() which is a function of VarB and VarC
...
由于会有大量变量(因此还有更多函数),我想将我的源代码分成可管理的块。所以我正在寻找一种自动方法来确保每个变量的所有函数都被实例化。
我想出了 3 种可能的方法来组织我的代码,但我对它们都不太满意,我正在寻找或建议哪种方法更好(或者即使我错过了完全不同的实现方法):
1. 部分类
partial class Base
{
}
partial class Base
{
[TypeA] VarA;
FA1 { .. }; // function of VarA and VarB
FA2 { .. }; // function of VarA and VarC
}
partial class Base
{
[TypeB] VarB;
FB1 { .. }; // function of VarB and VarA
FB2 { .. }; // function of VarB and VarC
}
优点:
- 简单的
- 只能从类 Base 中访问变量。
- 如果有两个相同类型的变量,那么每个变量的函数可以不同地实现自己的函数。
缺点:
- 无法自动确保为每个变量创建所有函数
- 需要手动确保每个函数名之间没有名称冲突。
请注意,缺点可能会通过某种代码生成器来解决(也许是时候学习 T4 了??)
2.内部类
class Base
{
internal [ClassA] ObjA = new [ClassA]();
internal [ClassB] ObjB = new [ClassB]();
}
class [BaseClassA]
{
public [TypeA] VarA;
public virtual F1 { .. };
public virtual F2 { .. };
}
class [ClassA] : [BassClassA]
{
public override F1 { .. }; // function of VarA and ObjB.VarB
public override F2 { .. }; // function of VarA and ObjC.VarC
}
...
优点:
- 类层次结构强制创建所有函数并且可以访问变量。
- 通过使用虚函数可以创建实例特定的函数实现
缺点:
- 使用内部意味着数据在程序集中的任何地方都是可见的。
3.静态数据
abstract class Data
{
static [TypeA] VarA;
static [TypeB] VarB;
...
}
abstract class [BaseClassA] : Data
{
public virtual F1 { .. };
public virtual F2 { .. };
}
class [ClassA] : [BassClassA]
{
public override F1 { .. }; // function of VarA and VarB
public override F2 { .. }; // function of VarA and VarC
}
class Base
{
[ClassA] ObjA = new [ClassA]();
[ClassB] ObjB = new [ClassB]();
}
优点:
- 系统确保所有例程都被实例化
- 数据不会在组件周围爆炸
- 在每个函数中,您可以根据“部分类”解决方案直接引用其他变量
缺点:
- 静态气味的使用就像我刚刚重新发明了全局数据。
我想要的是以某种方式挑选每种方法的最佳点:
- “Partial class”和“Static”方法访问变量的直接方式
- “Partial class”方法的本地数据
- 自动执行“内部”和“静态”方法的功能实现。
我想避免:
- “部分类”中缺乏强制函数生成
- “内部”方法中数据的全局访问
- 在“静态”方法中重新发明全局数据
如果我要让我的 druthers 我会说我想要以某种方式将接口应用于变量的实例 - 比如:
[TypeA] VarA : IFunctions;
[TypeB] VarB : IFunctions;
并且以某种方式让编译器从接口名称和变量名称中自动生成最终的函数名称。
因此,人们可以建议他们更愿意实施这 3 种方法中的哪一种,或者建议任何其他可能适合的方法。