2012-04-25 89 views
3

我们可以在外部类的构造函数中创建内部类的对象到C#中吗?它合法吗?将内部类对象转换为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我把从参考以下链接: Can we create an object of the inner class in the constructor of the outer class?

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

+5

接受一些答案... – MoonKnight 2012-04-25 07:58:22

+2

你试过吧!? – 2012-04-25 08:06:02

+1

你应该听听编译器,而不是听你的同事以及可能不是我们这样的小事。不难看出[它编译得很好](http://ideone.com/79YB9)。 – Jon 2012-04-25 08:07:38

回答

2

如果你声明的内部类公共

public class Inner { } 
+0

是的,我的内部班是公共班。 – 2012-04-25 08:00:37

1

的问题与您的代码很可能是如何调用代码知道内蒙古obj是什么,因为它不是外部类的外部访问。

更好的设计是让外部类的内部类不会紧密耦合。还要将对象传递给接口。

public class Outer 
{   
    public Outer(IInner inner) 
    { 

    } 
} 

public class Inner: IInner 
{ 
} 

public Interface IInner 
{ 
} 
0

这是非法的(会导致编译器错误),直到Innerpublic

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

+0

公共课上的内部课堂。现在是非法的。 – 2012-04-25 08:04:04

+1

@sarooptrivedi:现在一切都很好。 FCL本身也是如此,例如'字典 + KeyCollection'(你可以使用Reflector查看) – abatishchev 2012-04-25 08:07:38

+0

我会试试这个。 – 2012-04-25 08:14:01

相关问题