在Kathleen Dollard最近的博客文章中,她提出了一个在.net中使用嵌套类的有趣理由.但是,她还提到FxCop不喜欢嵌套类.我假设编写FxCop规则的人并不愚蠢,所以必须在该位置背后有推理,但我无法找到它.
我最近由我公司的一位高级开发人员审核了我的代码.他批评我的设计使用了太多的课程.我很想听听你的反应.
我的任务是创建一个服务,该服务生成一个xml文件,因为它操作了3个其他xml文件.我们将这些命名为aaa.xml,bbb.xml和ccc.xml.该服务分两个阶段进行.在第一阶段,它会针对bbb.xml清理aaa.xml.在第二阶段,它将第一阶段的产品与ccc.xml合并以产生最终结果.
我选择了一个包含三个类的设计:一个XmlService类,它使用了另外两个类,一个scrubber类和一个merger类.我保持擦洗和合并类是分开的,因为这两个类都很大并且具有不同的逻辑.
我认为我的方法很好,因为它让我的课程变得小而有凝聚力.我的方法也有助于控制我的测试类的大小.
高级开发人员断言,清理和合并类只能由XmlService类使用,因此应该是它的一部分.他觉得这会使XMLService具有凝聚力,这就是他所说的具有凝聚力的意思.他还认为以这种方式分手,会使他们松散凝聚力.
具有讽刺意味的是,我试图打破这些课程以达到凝聚力.你怎么看?谁对或错?我们都对吗?谢谢你的建议.
我们可以在C#中使用嵌套类.这些嵌套类也可以继承OuterClass.例如:
public class OuterClass
{
// code here
public class NestedClass : OuterClass
{
// code here
}
}
Run Code Online (Sandbox Code Playgroud)
完全可以接受.
我们也可以在不将NestedClass作为OuterClass的嵌套类的情况下实现这一点,如下所示:
public class OuterClass
{
// code here
}
public class NestedClass : OuterClass
{
// code here
}
Run Code Online (Sandbox Code Playgroud)
我想知道,上面两个场景之间有什么区别?在方案I中可以实现什么,在方案II中无法实现?通过使NestedClass"嵌套"到OuterClasss,我们能得到更多的东西吗?
经过一番研究后,我确定您可以应用于类的唯一访问修饰符是:
但是下面的错误消息似乎暗示如果一个类没有在命名空间中定义,那么它可以被定义为private,protected或protected internal.
public和internal是唯一可以在课堂上使用的类修饰符还是更多?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test2343434
{
class Program
{
static void Main(string[] args)
{
Tools.ToolManager toolManager = new Tools.ToolManager();
Console.ReadLine();
}
}
}
namespace Tools
{
//error: Elements defined in a namespace cannot be explicitly
//declared as private, protected, or protected internal
private class ToolManager
{
public ToolManager()
{
Console.WriteLine("inside tool manager");
}
}
}
Run Code Online (Sandbox Code Playgroud)