当前位置:  开发笔记 > 编程语言 > 正文

在C#中的另一个类内声明的类

如何解决《在C#中的另一个类内声明的类》经验,为你挑选了3个好方法。

我正在研究一些遗留代码,并且遇到了一些我不确定的问题.我们有一个class y在另一个内部声明class x.Class y只是在里面使用class x但我的问题是为什么你不创建一个单独的类文件并放在class y那里而不是在其中声明它class x?这不是违反OOP的,或者只是风格问题,因为它只在本课程中使用过.我正在重构一些代码,我的第一反应是分离class y出它自己的文件.

namespace Library
{
   public class x
   {
      // methods, properties, local members of class x

      class y
      {
         // methods, properties, local members of class y
      }
   }
}

plinth.. 60

您创建了一个内部类,因为它只在类x的范围内使用,并且它在逻辑上适合于类x的因子/体系结构.

类y也可能知道x类的实现细节,这些细节并不是公众所知的.



1> plinth..:

您创建了一个内部类,因为它只在类x的范围内使用,并且它在逻辑上适合于类x的因子/体系结构.

类y也可能知道x类的实现细节,这些细节并不是公众所知的.


没关系,刚刚找到http://blogs.msdn.com/b/oldnewthing/archive/2006/08/01/685248.aspx

2> Marc Gravell..:

这具有权限含义.顶级"类y"将是"内部" - 但是,这里"y"对"x"是私有的.此方法有助于实现细节(例如缓存行等).同样,y可以访问所有私有状态x.

仿制药也有其含义; x.y是通用的"T",继承自外部类.你可以在这里看到这里,Bar充分利用T- 并注意任何静态字段的Bar范围T.

class Foo {
    void Test(T value) {
        Bar bar = new Bar();
        bar.Value = value;
    }
    class Bar {
        public T Value { get; set; }
    }
}

通常人们错误地认为他们需要定义BarBar- 这现在(有效地)是双重通用的 - 即Foo- TOld现在(现在不可用)T来自哪里Foo.所以不要这样做!或者,如果您希望它是双重通用的,请选择不同的名称.幸运的是,编译器警告你这个......


+1解释外部类中的"T"如何成为内部类的闭合构造类型的一部分可能是个好主意.许多人都不知道这一点很重要.

3> Pawel Krakow..:

这个代码很好,因为你给出的确切原因 - "类y只在类x中使用过".这些是嵌套类型,使用它们的一个原则是嵌套类型应该与它们的声明类型紧密耦合,并且不能用作通用类型.这样,嵌套类对其他类来说是不可能的,但仍然允许您遵循面向对象的原则.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有