3

我们可以在外部类的构造函数中将内部类的对象创建到C#中吗?合法吗?

public class Outer
{
    public Inner InnerObj {get; set; }

    public Outer()
    {
        Inner inner = new Inner();
    }

    public Outer(Inner inner)
    {
        InnerObj = inner;
    }

    public class Inner
    {
    }
} 

对于 Java,我从下面的链接中获取参考: 我们可以在外部类的构造函数中创建内部类的对象吗?

我的同事说这在 C# 中是不可能的,而且是完全非法的。请指导我。

4

4 回答 4

2

如果您将 Inner 类声明为 public

public class Inner { }
于 2012-04-25T07:57:35.027 回答
1

您的代码的问题是调用代码如何知道内部 obj 是什么,因为在外部类之外无法访问它。

更好的设计是将内部类放在外部类之外,这样它就不会那么紧密耦合。还将对象传递给接口。

public class Outer
{        
    public Outer(IInner inner)
    {

    }
}

public class Inner: IInner
{
}

public Interface IInner
{
}
于 2012-04-25T07:57:44.623 回答
1

当然,这是可能的。从技术上讲,您的代码没有任何问题(如果您将内部公开或外部类设为内部)。

但是请注意,不建议使用公共嵌套类,有关详细信息,请参阅此问题:

于 2012-04-25T08:07:39.190 回答
0

Inner在is not之前这是非法的(导致编译器错误)public

标记为公开后,它是绝对合法的。

于 2012-04-25T08:02:39.203 回答