为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

C#
摇曳的蔷薇 2019-08-23 16:07:02

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

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



查看完整描述

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对象中运行的所有代码。我的所有子类都可以通过基类共享实现细节。


查看完整回答
反对 回复 2019-08-23
?
慕标琳琳

也许这是何时使用嵌套类的一个很好的例子?

// ORIGINAL
class ImageCacheSettings { }class ImageCacheEntry { }class ImageCache{
    ImageCacheSettings mSettings;
    List<ImageCacheEntry> mEntries;}

和:

// REFACTOREDclass ImageCache{
    Settings mSettings;
    List<Entry> mEntries;

    class Settings {}
    class Entry {}}

PS:我没有考虑应该应用哪些访问修饰符(私有,受保护,公共,内部)


查看完整回答
反对 回复 2019-08-23
?
蛊毒传说

公共嵌套成员也有很好的用途......

嵌套类可以访问外部类的私有成员。因此,这是正确的方式,即创建Comparer(即实现IComparer接口)。

在这个例子中,FirstNameComparer可以访问private _firstName成员,如果该类是一个单独的类,它就不会访问它...

public class Person{
    private string _firstName;
    private string _lastName;
    private DateTime _birthday;

    //...

    public class FirstNameComparer : IComparer<Person>
    {
        public int Compare(Person x, Person y)
        {
            return x._firstName.CompareTo(y._lastName);
        }
    }}


查看完整回答
反对 回复 2019-08-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信