Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中访问内部结构/类#_C#_Class Design - Fatal编程技术网

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

C# 在C中访问内部结构/类#,c#,class-design,C#,Class Design,我有一个类,它有一个内部结构/类(我已经决定了哪一个,如果这对我来说很重要的话,我将使用它),我希望内部类可以从其他类访问,但只能由外部类构造。 这可能吗 谢谢不幸的是,您能得到的最接近的是内部构造函数。虽然外部类的private和protected成员可用于内部类,但事实并非如此。为什么不声明一个内部接口(或内部抽象类)使其不可实例化,然后声明一个实现该接口的私有内部类呢 差不多 using System; namespace test { class Outer {

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


谢谢

不幸的是,您能得到的最接近的是
内部
构造函数。虽然外部类的
private
protected
成员可用于内部类,但事实并非如此。

为什么不声明一个内部接口(或内部抽象类)使其不可实例化,然后声明一个实现该接口的私有内部类呢

差不多

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
可以创建具体的
internal
对象,而其他类必须调用
MakeInner
方法。

请注意,通过这种方式,您还可以对同一程序集中的类强制执行约束。

internal似乎可以工作,我希望只有外部类可以访问,但这已经足够了。谢谢