访问C#中的内部结构/类

时间:2009-08-27 17:48:29

标签: c# class-design

我有一个具有内部结构/类的类(我已经决定了哪个,如果它对此我很重要,我将使用它)我希望从其他类访问内部类,但只能由外部类构造。 这可能吗?

由于

2 个答案:

答案 0 :(得分:4)

不幸的是,你能得到的最接近的是internal构造函数。虽然外部类的privateprotected成员可用于内部类,但情况恰恰相反。

答案 1 :(得分:4)

为什么不声明内部接口(或内部抽象类)以便不可实例化,然后是实现接口的私有内部类?

这样的东西
using System;
namespace test {

    class Outer {

        public interface IInner {
            void SayHello();
        }

        private class Inner : IInner {
            public void SayHello() {
                Console.WriteLine("Hello");
            }
        }

        public IInner MakeInner() {
            return new Inner();
        }

    }

    class Program {
        static void Main(string[] args) {
            Outer x = new Outer();
            x.MakeInner().SayHello();
        }
    }
}

这样只有Outer可以创建具体的Inner个对象,而其他类必须调用MakeInner方法。
请注意,通过这种方式,您还可以对同一程序集中的类强制执行约束。