在.NET中不通过构造函数创建对象
2023/7/6 10:13:31
使用new创建对象
在实际开发中,我们最常见的莫过于通过new关键字调用构造函数来创建类的一个对象,一般的写法如下:
SqlConnectionStringBuilder sqlConnectionStringBuilder = new SqlConnectionStringBuilder();
使用反射创建对象
我们也可以通过.NET提供的反射机制来创建一个对象,反射系统仍然需要调用类的构造函数才能创建对象,示例代码:
object obj = Activator.CreateInstance(typeof(SqlConnectionStringBuilder)); SqlConnectionStringBuilder sqlConnectionStringBuilder = (SqlConnectionStringBuilder)obj;
当然,反射有很多种方法,上面只给出了非常简单的反射,你虽然可以选择各种反射来创建对象,但你仍无法避免构造函数的调用。
不用通过构造函数对象创建对象
无论是通过何种方式来反射,还是使用new关键字,都避免不了调用构造函数,你能调用下面的HelloWorld方法吗?
public class TestClass { public TestClass() { throw new InvalidOperationException(); }
<span style="color: blue;">public string </span>HelloWorld()
{
<span style="color: blue;">return </span><span style="color: #a31515;">"Hello World!"</span>;
}
}
如果你没有给出答案,不妨试试下面的示例代码,它创建并使用对象,但不会调用构造函数:
TestClass test = (TestClass)System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(TestClass)); test.HelloWorld();