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