我有一个具有一些功能的类。这些函数可以在“NameSpace”中进行分类。 我搜索一种方法将每个函数组织成一个名字空间到我的类中。 有人建议我改变我的方法。使用接口而不是继承。将功能组织到一个类中(按类别)
这里是一些样品BE了解
public class Class1
{
public string A = "A";
public string B = "B";
public int one = 1;
public int two = 2;
public Printer globalPrinter;
}
public class Class10 : Class1
{
public class Letter
{
public void FunctionA()
{
globalPrinter.print(A);
}
public void FunctionB()
{
globalPrinter.print(B);
}
}
public class Number
{
public void Function1()
{
globalPrinter.print(one);
}
public void Function2()
{
globalPrinter.print(two);
}
}
}
public class ClassX : Class10
{
public ClassX()
{
Letter.FunctionA();
Letter.FunctionB();
Number.Function1();
Number.Function2();
}
}
var c10 = new ClassX();
此代码不能正常工作。你可以看看,在样品结束时,你会看到
Letter.FunctionA();
Letter.FunctionB();
Number.Function1();
Number.Function2();
我可以简单地将FunctionA和FunctionB放入Class10中。但如果有100个功能。将功能分成类别可能更有趣。
让我看看你的问题的方法。
我添加了一些帮助分类的项目。
答案全码
public class Class1
{
public string A = "A";
public string B = "B";
public int one = 1;
public int two = 2;
public void globalPrinter(object t)
{
}
}
public class Class10 : Class1
{
public class Letter
{
readonly Class10 parent;
public Letter(Class10 parent)
{
this.parent = parent;
}
public void FunctionA()
{
parent.globalPrinter(parent.A);
}
public void FunctionB()
{
parent.globalPrinter(parent.B);
}
}
public class Number
{
readonly Class10 parent;
public Number(Class10 parent)
{
this.parent = parent;
}
public void Function1()
{
parent.globalPrinter(parent.one);
}
public void Function2()
{
parent.globalPrinter(parent.two);
}
}
}
public class ClassX : Class10
{
public ClassX()
{
new Letter(this).FunctionA();
new Letter(this).FunctionB();
new Number(this).Function1();
new Number(this).Function2();
}
}
ClassX c10 = new ClassX();
您提供的示例代码有点难以遵循,并且没有做太多工作来演示正在建模的对象的语义。根据你想要实现的内容,接口可能确实是答案的一部分。也就是说,如果方法的任何给定的子集可以在语义上分组为特定的功能合同。但根据所提供的示例无法知道,因为它没有任何有意义的上下文。你能创建一个更真实的例子,并且更清楚地描述这个问题吗? – David 2014-10-02 18:19:42
FunctionA(),FunctionB()和FunctionC()需要是静态的,以在不创建类的实例的情况下调用它们。 Class1中的变量A和B也是如此。 – tdbeckett 2014-10-02 18:23:36
我更改我的示例以获取分类的更多详细信息。 – forX 2014-10-02 18:48:58