猿问
下载APP

为什么我需要使用C#嵌套类

为什么我需要使用C#嵌套类

我试图了解C#中的嵌套类。我知道嵌套类是在另一个类中定义的类,我没有得到的是为什么我需要这样做。



摇曳的蔷薇
浏览 51回答 3
3回答

弑天下

我特别喜欢的模式是将嵌套类与工厂模式结合起来:public abstract class BankAccount{   private BankAccount() {} // prevent third-party subclassing.   private sealed class SavingsAccount : BankAccount { ... }   private sealed class ChequingAccount : BankAccount { ... }   public static BankAccount MakeSavingAccount() { ... }   public static BankAccount MakeChequingAccount() { ... }}通过嵌套这样的类,我让第三方无法创建自己的子类。我完全控制在任何bankaccount对象中运行的所有代码。我的所有子类都可以通过基类共享实现细节。

慕标琳琳

也许这是何时使用嵌套类的一个很好的例子?//&nbsp;ORIGINAL class&nbsp;ImageCacheSettings&nbsp;{&nbsp;}class&nbsp;ImageCacheEntry&nbsp;{&nbsp;}class&nbsp;ImageCache{ &nbsp;&nbsp;&nbsp;&nbsp;ImageCacheSettings&nbsp;mSettings; &nbsp;&nbsp;&nbsp;&nbsp;List<ImageCacheEntry>&nbsp;mEntries;}和://&nbsp;REFACTOREDclass&nbsp;ImageCache{ &nbsp;&nbsp;&nbsp;&nbsp;Settings&nbsp;mSettings; &nbsp;&nbsp;&nbsp;&nbsp;List<Entry>&nbsp;mEntries; &nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Settings&nbsp;{} &nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Entry&nbsp;{}}PS:我没有考虑应该应用哪些访问修饰符(私有,受保护,公共,内部)

蛊毒传说

公共嵌套成员也有很好的用途......嵌套类可以访问外部类的私有成员。因此,这是正确的方式,即创建Comparer(即实现IComparer接口)。在这个例子中,FirstNameComparer可以访问private _firstName成员,如果该类是一个单独的类,它就不会访问它...public&nbsp;class&nbsp;Person{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;string&nbsp;_firstName; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;string&nbsp;_lastName; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;DateTime&nbsp;_birthday; &nbsp;&nbsp;&nbsp;&nbsp;//... &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;FirstNameComparer&nbsp;:&nbsp;IComparer<Person> &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;Compare(Person&nbsp;x,&nbsp;Person&nbsp;y) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;x._firstName.CompareTo(y._lastName); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答