能不能跨过构造函数创建对象
比如这样
class MyClass
{
public int Value{ get; set; }
public MyClass(int value)
{
this.Value = value;
throw new Exception();
}
}
void Main()
{
MyClass obj = new MyClass(1); // 会抛出错误。怎么样才能创建MyClass实例?
int value = obj.Value;
}
------解决方案--------------------不能跨过构造方法创建实例,因为这是创建实例的前提。如果你不想执行这个构造方法,构造方法是可以重载的,你可以自己写一个构造方法去使用,那么就不会执行这个构造方法了。
------解决方案--------------------对象创建不了通常不是内部单例实例化掉了,就是压根就不允许实例化,反正就是不想让外部实例化对象。这种情况下,外部就不用考虑实例化了,获取/设置属性是你唯一能做的了,除非该对象还有象Instance之类的内部实例公开出来了
------解决方案--------------------反正在IL和CLR层次之上是办不到,包括反射/序列化/unsafe。除非你有能力hack CLR。
------解决方案--------------------
你仿造的对象,又不是原来那个真正的对象,命名空间,包括类名都不一样,传进去会报参数不匹配的错误
------解决方案--------------------完全不可能,例如把构造函数私有,那么这个类不可能创建一个对象.
------解决方案--------------------你既然可以用用typeof(MyClass)了,就说明可以反编译它了,直接看看构造函数里面执行到哪里出的问题,然后想办法避免,如果要仿造那个类,不可能。
另外你确定那个是class而不是struct吗?struct是可以避开构造函数的。