当你想到鸟巢类在C#?[重复]
-
07-07-2019 - |
题
这个问题已经有一个答案在这里:
- 为何/何时应使用嵌套的课程。净?或者不应该吗? 13的答案
具体而言,任何人都可以得到我的具体实例时,或者在不使用嵌套的课?
我已经知道关于这个特征,因为永远,但从来没有一个原因需要使用它。
谢谢。
解决方案
当嵌套类只用于外部类,一个很好的例子,不再有必要,是对一个数类收集。
另一个例子可能是一枚举,以替换为一个真正的虚假的参数使用的方法在某一类别,以澄清的呼吁的签名...
而不是的
public class Product
{
public void AmountInInventory(int warehouseId, bool includeReturns)
{
int totalCount = CountOfNewItems();
if (includeReturns)
totalCount+= CountOfReturnedItems();
return totalCount;
}
}
和
product P = new Product();
int TotalInventory = P.AmountInInventory(123, true);
这使它不清楚为什么"真实"意味着,你可以写:
public class Product
{
[Flags]public enum Include{None=0, New=1, Returns=2, All=3 }
public void AmountInInventory(int warehouseId, Include include)
{
int totalCount = 0;
if ((include & Include.New) == Include.New)
totalCount += CountOfNewItems();
if ((include & Include.Returns) == Include.Returns)
totalCount += CountOfReturns();
return totalCount;
}
}
product P = new Product();
int TotalInventory = P.AmountInInventory(123, Product.Include.All);
这使得参数值的清楚的客户代码。
其他提示
这两个地方在那里我用的套类:
嵌套的使用完全由外部类,我想完全私人的范围。
嵌套的使用类具体实现一个接口定义的其他地方。例如,实施一枚举器落入这个类别。
你真的只想使用嵌套类当你是肯定的嵌套类没有意义,它将被用于任何其他地方。
例如,如果您需要创建一个列表中的几种类型的对象的关联在一起的功能和成员的有关信息,设定对象的一个短时间内(如方法或性质),可以使用一套类做到这一点。也许你需要创建一个列表中的所有组合的某种类型的对象,那么标记的所有组合中,有一定的属性。这将是一个良好的情况下,一套类。
如果你不需要的方法上的嵌套类,可能只使用一个 结构 但我不知道如果IL对待他们的任何不同。
我有时会使用这个简单的帮助的类我需要一个功能或两个内部的父类。
对于一个实际的例子,看到这个问题今天上午早些时候:
让的对象访问的唯一一个其它的对象在同样的集会?
摘要:你可以窝的一个相关的数据类别内的业务对象。
我已经看到情况下的嵌套类当一个特殊的目的数据结构的使用只能在一个类或某些例外引发和抓到只在一个类。
我巢类的时候我有一个帮手类已经没有必要可以看见任何其他目的的系统。这样可保持能见度为限,尽可能帮助防止意外使用的类
以下鲍勃叔叔的"规则"上的凝聚力应该找到你实际上创造相当数量的嵌套(和嵌套的嵌套!) 课程。这些 可能 是由非嵌套但是 只 如果你还有其他客户参考它们的现在。
我想提高在我以前的答案!
一个特定区域里,我用的套类定期是使界面注射和反转的控制。例...
public class Worker
{
private IHelper _helper;
public Worker()
: this (new DefaultHelper())
{
}
public Worker(IHelper helper)
{
this._helper = helper;
}
private class DefaultHelper : IHelper
{
}
}