我有一個具有一些功能的類。這些函數可以在「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