猿问
下载APP

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

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

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



摇曳的蔷薇
浏览 266回答 4
4回答

BlueColor

嵌套类型,一般只针对父类的特殊功能实现,比如 C# 实现的迭代器模式,有了Enumerator 你的Foreach 循环才可以实现;public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable{...        [Serializable]        public struct Enumerator : IEnumerator<T>, IDisposable, IEnumerator        {                  }}

弑天下

我特别喜欢的模式是将嵌套类与工厂模式结合起来:public&nbsp;abstract&nbsp;class&nbsp;BankAccount{ &nbsp;&nbsp;private&nbsp;BankAccount()&nbsp;{}&nbsp;//&nbsp;prevent&nbsp;third-party&nbsp;subclassing. &nbsp;&nbsp;private&nbsp;sealed&nbsp;class&nbsp;SavingsAccount&nbsp;:&nbsp;BankAccount&nbsp;{&nbsp;...&nbsp;} &nbsp;&nbsp;private&nbsp;sealed&nbsp;class&nbsp;ChequingAccount&nbsp;:&nbsp;BankAccount&nbsp;{&nbsp;...&nbsp;} &nbsp;&nbsp;public&nbsp;static&nbsp;BankAccount&nbsp;MakeSavingAccount()&nbsp;{&nbsp;...&nbsp;} &nbsp;&nbsp;public&nbsp;static&nbsp;BankAccount&nbsp;MakeChequingAccount()&nbsp;{&nbsp;...&nbsp;}}通过嵌套这样的类,我让第三方无法创建自己的子类。我完全控制在任何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
我要回答