使用静态方法实例化私有内部类

时间:2014-01-06 23:24:23

标签: c# .net oop

有没有更好的方式做这样的事情(或者甚至有意义):

class A {
    public static B buildClass() {
        return new B();
    }

    private class B {
        //implementation
    }
}

我正在建造一个简单的工厂类。我可以在静态方法中实例化一个非静态成员,这似乎很奇怪,但它似乎有用。

关于如何改善这一点的任何建议?

2 个答案:

答案 0 :(得分:1)

你有正确的想法,但通常这个类不是私有的,而是构造函数。

public class MakeHello
{
    public static MakeHello CreateHello()
    {

        return new MakeHello();
    }


    private MakeHello()
    {

    }
}

和其他地方

        var a = MakeHello.CreateHello();

    // Can't instantiate because private
        var b = new MakeHello();

答案 1 :(得分:1)

静态方法不能使用INSTANCE字段或定义的类的方法 您的调用不使用类A的方法的任何实例字段。它创建一个B类的新实例并尝试返回它。在这里你有一个导致编译失败的问题。 B类是A的私有,不能通过A的公共方法返回,因为外部世界(A外)对B一无所知。公开

例如:

class A 
{
    public int publicField = 0;

    public static B buildClass() 
    {
        // Fails, it is an instance field, cannot be used by a static method
        // without creating an instance of class A
        publicField++; 

        // Works, create an instance of A and use its public fields
        A myself = new A();
        myself.publicField++;

        // works because B is public
        return new B();
    }

    public class B 
    {
        //implementation
    }
}