C# 将函数组织到类中(按类别)
我有一个带有一些函数的类。这些函数可以在“名称空间”中进行分类。 我寻找一种方法将每个函数组织到类中的某个名称空间中。 有人建议我改变我的方法。使用接口而不是继承 这里有一些示例供您理解C# 将函数组织到类中(按类别),c#,inheritance,interface,C#,Inheritance,Interface,我有一个带有一些函数的类。这些函数可以在“名称空间”中进行分类。 我寻找一种方法将每个函数组织到类中的某个名称空间中。 有人建议我改变我的方法。使用接口而不是继承 这里有一些示例供您理解 public class Class1 { public string A = "A"; public string B = "B"; public int one = 1; public int two = 2; pu
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();
问题是像
Class10.Letter
这样的子类不是其父类Class10
所属的继承层次结构的一部分
因此,Class10。字母
不继承自Class1
,只有Class10
继承自Class1
,因此Class10。字母
需要一个Class1
或Class10
的实例,这样它就可以访问globalPrinter
public class Class10: Class1 {
public class Letter {
readonly Class10 parent;
public Letter(Class10 parent) {
this.parent = parent;
}
public void FunctionA() {
parent.globalPrinter.print(parent.A);
}
}
}
而且ClassX
继承自Class10
,因此它可以访问Class10
函数,但它不继承自Class10。字母
,因此ClassX
如果调用非静态函数,则需要Letter
的实例:
public ClassX() {
new Letter(this).FunctionA();
...
您提供的示例代码有点难以理解,并且在演示所建模对象的语义方面没有做很多工作。根据您试图实现的目标,接口可能确实是答案的一部分。也就是说,如果方法的任何给定子集可以在语义上分组到特定的功能契约中。但根据提供的示例不可能知道,因为它没有有意义的上下文。您能创建一个更真实的示例并更清楚地描述这个问题吗?FunctionA()、FunctionB()和FunctionC()需要是静态的,才能在不创建类实例的情况下调用它们。Class1中的变量A和B也是如此。我更改了我的示例以了解分类的更多细节。如果您的类将有100多个函数,那么它可能有100多个。它可能会打印数字和字母。(这是一个例子)。100太多了,只是为了强调函数不止几个。我不能,函数a不能是静态的,因为它使用当前/父对象的非静态变量。好吧,你已经更改了示例,所以现在没有定义Class20。在任何情况下,如果一个函数不是静态的,你需要用new创建一个类的实例。你的权利,我更改我的示例,有人在注释中要求。是的,我的“主类”ClassX将被实例化。需要包含变量并设置globalPrinter.new答案基于新样本代码问题在ClassX之前。你不能做环球打印机;无法从其父级访问它。