为什么我通过其他脚本调用此方法时会收到 NullReferenceException?
Why am I getting NullReferenceException when I call this method through other scripts?
我正在从事这个语音识别和文本到语音的项目。我得到了三个脚本,一个是 Form.cs
,另一个是文本到语音的脚本 (Voice.cs
),另一个是其他方法的脚本 Auxiliary.cs
。
Voice.cs
有变量 SpeechSynthesizer synth = new SpeechSynthesizer();
正常。
然后我有这个 void
:
public void Say(string speech)
{
synth.SpeakAsync (speech);
}
当我在 Form.cs
脚本中调用 Voice.Say(string)
时它运行良好,当我从 Auxiliary.cs
调用它时它在合成器中抛出 NullReferenceException
。
为什么会这样?我的意思是,表单脚本以与 Auxiliary.cs
完全相同的方式调用它
抱歉,如果这个问题已经存在,我在整个网站上都进行了搜索,但一无所获。
编辑:这些是代码。
//Form1.cs
public partial class Form1 : Form
{
public Auxiliary auxiliary;
public Voice voice;
public void Form1_Load ()
{
voice = new Voice ();
auxiliary = new Auxiliary();
voice.Say("Hi, Patrick");
}
}
//Auxiliary.cs
public class Auxiliary
{
public Voice voice;
public void Start()
{
voice = new Voice();
voice.Say("Hi");
}
}
//Voice.cs
public class Voice
{
public SpeechSynthesizer synth;
public void Start()
{
synth = new SpeechSynthesizer();
}
public void Say(string speech)
{
synth.SpeakAsync(speech);
}
}
向 类 添加具有适当参数的构造函数是一个好习惯。
Using Constructors (C# Programming Guide)
在你的例子中,方法 Voice.Start() 从未被调用,因此存在 synth
对象的 none 个实例。
// Voice.cs
public class Voice
{
public SpeechSynthesizer synth;
public Voice()
{
Start();
}
public void Start()
{
synth = new SpeechSynthesizer();
synth.SetOutputToDefaultAudioDevice();
}
public void Say(string speech)
{
synth.SpeakAsync(speech);
}
}
我正在从事这个语音识别和文本到语音的项目。我得到了三个脚本,一个是 Form.cs
,另一个是文本到语音的脚本 (Voice.cs
),另一个是其他方法的脚本 Auxiliary.cs
。
Voice.cs
有变量 SpeechSynthesizer synth = new SpeechSynthesizer();
正常。
然后我有这个 void
:
public void Say(string speech)
{
synth.SpeakAsync (speech);
}
当我在 Form.cs
脚本中调用 Voice.Say(string)
时它运行良好,当我从 Auxiliary.cs
调用它时它在合成器中抛出 NullReferenceException
。
为什么会这样?我的意思是,表单脚本以与 Auxiliary.cs
抱歉,如果这个问题已经存在,我在整个网站上都进行了搜索,但一无所获。
编辑:这些是代码。
//Form1.cs
public partial class Form1 : Form
{
public Auxiliary auxiliary;
public Voice voice;
public void Form1_Load ()
{
voice = new Voice ();
auxiliary = new Auxiliary();
voice.Say("Hi, Patrick");
}
}
//Auxiliary.cs
public class Auxiliary
{
public Voice voice;
public void Start()
{
voice = new Voice();
voice.Say("Hi");
}
}
//Voice.cs
public class Voice
{
public SpeechSynthesizer synth;
public void Start()
{
synth = new SpeechSynthesizer();
}
public void Say(string speech)
{
synth.SpeakAsync(speech);
}
}
向 类 添加具有适当参数的构造函数是一个好习惯。
Using Constructors (C# Programming Guide)
在你的例子中,方法 Voice.Start() 从未被调用,因此存在 synth
对象的 none 个实例。
// Voice.cs
public class Voice
{
public SpeechSynthesizer synth;
public Voice()
{
Start();
}
public void Start()
{
synth = new SpeechSynthesizer();
synth.SetOutputToDefaultAudioDevice();
}
public void Say(string speech)
{
synth.SpeakAsync(speech);
}
}