创建没有构造函数的类实例

本文关键字:实例 构造函数 创建 | 更新日期: 2023-09-27 17:50:12

我的应用程序是使用语音识别库的Windows Phone 8应用程序。该类中的一个对象类型是SpeechRecognitionResult。这个类没有构造函数,或者它们是内部的。我想创建这种类型的对象,这样我就可以从视图模型中的属性返回设计时数据,该属性的类型为SpeechRecognitionResult。我发现这个帖子似乎有一个解决方案:

使用反射在c#中创建没有默认构造函数的类型的实例

但是我找不到FormatterServices符号的任何地方,所以我可以调用FormatterServices. getuninitializedobject ()。我有系统。反射和"System.Runtime. "序列化"包含在我的代码文件中。有人知道我在哪里可以找到我的WP8项目的方法吗?如果没有,有没有其他的方法来完成这件事?

创建没有构造函数的类实例

您可以使用反射来检索内部/私有构造函数,并调用它。如果你应该这样做,这是另一个问题,因为构造函数是内部/私有的是有原因的,这通常意味着你不应该这样做。

public class TestClass {
    private TestClass() { }
}
var t = typeof(TestClass);
var ci = t.GetConstructor(
    BindingFlags.NonPublic | BindingFlags.Instance,
    null,
    new Type[0],
    null
);
var myTestClassObject = (TestClass)ci.Invoke(null);

很多时候,当类没有构造函数时,它们不打算直接创建。在SpeechRecognitionResult对象的情况下,这些对象是调用RecognizeSpeechToTextAsync的结果。你可以在网上找到一些例子,但一个简单的例子是:

var credentials = new SpeechAuthorizationParameters();
credentials.ClientId = "<YOUR CLIENT ID>";
credentials.ClientSecret = "<YOUR CLIENT SECRET>";
var sr = new SpeechRecognizer("en-US", credentials);
var speechResult = await sr.RecognizeSpeechToTextAsync();

在这个例子中,"speechResult"的类型是"SpeechRecognitionResult"。从那里,你应该能够序列化"文本"或替代版本属性,并在你的前端使用它们。希望这能帮助你走上正确的道路!

如果您需要更多的详细信息,请参考MSDN。