建议109:谨慎使用嵌套类

本文建议在C#中仅在需要访问外部类私有成员时使用嵌套类,并且应将其声明为私有,以限制其可见性。文章通过一个集合类的例子说明了如何正确地实现嵌套类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建议109:谨慎使用嵌套类

使用嵌套类的原则是:当某类型需要访问另一个类型的私有成员时,才将它实现为嵌套类。一个典型的例子是在实现集合时,要为集合实现迭代器,这时用到了嵌套类。代码如下所示:

复制代码
public class ArrayList : IList, ICollection, IEnumerable, ICloneable
{
    //省略
    public virtual IEnumerator GetEnumerator()
    {
        return new ArrayListEnumeratorSimple(this);
    }

    [Serializable]
    private sealed class ArrayListEnumeratorSimple : IEnumerator, ICloneable
    {
        //省略
        internal ArrayListEnumeratorSimple(ArrayList list)
        {
            this.list = list;
            this.index = -1;
            this.version = list._version;
            this.isArrayList = list.GetType() == typeof(ArrayList);
            this.currentElement = dummyObject;
        }
    }
}
复制代码

我们可以注意到,嵌套类ArrayListEnumeratorSimple访问了若干外部类ArrayList的私有成员。

另外需要强调的是,如果必须出现一个嵌套类,应该将其实现为private。也就是说,除了包含它的外部类外,不应该让任何其他类型可以访问到它。嵌套类的服务对象应该属于当前类。

 

 

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值