在.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();