如何禁止对象直接实例化
比如有两个类:
class A{
...
}
class B{
public static A createA();
}
类A不能直接实例化,如 A a = new A();
禁止象上面直接实例化,
而必须通过B的方法来创建A,
如:
A a = B.createA();
就是说:
A a = new A(); //不允许这样直接实例化
A a = B.createA(); //只能通过B来创建A
[解决办法]
使用嵌套类
class B{
public static A createA();
class A{
...
}
}
[解决办法]
class Program { static void Main(string[] args) { A a=B.CreateA(); Console.WriteLine(a.aa); Console.Read(); } } class A { private A()//禁止直接实例化 { } public int aa = 2; } class B { public static A CreateA() { //通过反射实例化 Type t = typeof(A); A a = t.Assembly.CreateInstance(t.FullName, false, BindingFlags.CreateInstance | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.ExactBinding, null, null, null, null) as A; return a; } }
[解决办法]
分在不同的 dll 里面,不能用嵌套
那就没法实现了,你的设计存在问题,是错误的
[解决办法]
分在不同工程!呵呵。
不要管它了。不用禁止。
这就好比如说你找了个一开始就被定义为相当自由的女朋友,你想给她戴上贞洁带,那是纠结的。还不如不用管了,看看能测试出什么bug来?!
[解决办法]