在.NET中不通过构造函数创建对象

2023/7/6 02:13:31

"### 使用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();"