我正在研究一些遗留代码,并且遇到了一些我不确定的问题.我们有一个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类的实现细节,这些细节并不是公众所知的.
您创建了一个内部类,因为它只在类x的范围内使用,并且它在逻辑上适合于类x的因子/体系结构.
类y也可能知道x类的实现细节,这些细节并不是公众所知的.
这具有权限含义.顶级"类y"将是"内部" - 但是,这里"y"对"x"是私有的.此方法有助于实现细节(例如缓存行等).同样,y
可以访问所有私有状态x
.
仿制药也有其含义; x
是通用的"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; } } }
通常人们错误地认为他们需要定义Bar
为Bar
- 这现在(有效地)是双重通用的 - 即Foo
- TOld
现在(现在不可用)T
来自哪里Foo
.所以不要这样做!或者,如果您希望它是双重通用的,请选择不同的名称.幸运的是,编译器警告你这个......
这个代码很好,因为你给出的确切原因 - "类y只在类x中使用过".这些是嵌套类型,使用它们的一个原则是嵌套类型应该与它们的声明类型紧密耦合,并且不能用作通用类型.这样,嵌套类对其他类来说是不可能的,但仍然允许您遵循面向对象的原则.