Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#无法在实例化事件之前订阅事件。用于从其他类更新UI_C#_Oop - Fatal编程技术网

C#无法在实例化事件之前订阅事件。用于从其他类更新UI

C#无法在实例化事件之前订阅事件。用于从其他类更新UI,c#,oop,C#,Oop,我正在制作一个非常简单的RPG作为学习语言的一种手段。从现在开始,您可以按“浏览”按钮。发生这种情况: currentFight = new Combat(); currentFight.CombatStarted += new Combat.CombatStartedEventHandler(UpdateUI); currentFight.StartCombat(); 战斗构装师: public Combat() { Combatant = DatabaseLookUp.randG

我正在制作一个非常简单的RPG作为学习语言的一种手段。从现在开始,您可以按“浏览”按钮。发生这种情况:

currentFight = new Combat();
currentFight.CombatStarted += new Combat.CombatStartedEventHandler(UpdateUI);
currentFight.StartCombat();
战斗构装师:

public  Combat()
{
    Combatant = DatabaseLookUp.randGen();                
}
public void StartCombat()
{
    OnCombatStarted();
}
public delegate void CombatStartedEventHandler(object source, EventArgs args);
public event CombatStartedEventHandler CombatStarted;

protected virtual void OnCombatStarted()
{
    if (CombatStarted != null)
    // Checks if there are subscribers to the EnemyChanged event
    //'this' class is the one sending the event, and we do not want to send any additional data
    CombatStarted(this, EventArgs.Empty);       
}
StartCombat功能:

public  Combat()
{
    Combatant = DatabaseLookUp.randGen();                
}
public void StartCombat()
{
    OnCombatStarted();
}
public delegate void CombatStartedEventHandler(object source, EventArgs args);
public event CombatStartedEventHandler CombatStarted;

protected virtual void OnCombatStarted()
{
    if (CombatStarted != null)
    // Checks if there are subscribers to the EnemyChanged event
    //'this' class is the one sending the event, and we do not want to send any additional data
    CombatStarted(this, EventArgs.Empty);       
}
事件代码:

public  Combat()
{
    Combatant = DatabaseLookUp.randGen();                
}
public void StartCombat()
{
    OnCombatStarted();
}
public delegate void CombatStartedEventHandler(object source, EventArgs args);
public event CombatStartedEventHandler CombatStarted;

protected virtual void OnCombatStarted()
{
    if (CombatStarted != null)
    // Checks if there are subscribers to the EnemyChanged event
    //'this' class is the one sending the event, and we do not want to send any additional data
    CombatStarted(this, EventArgs.Empty);       
}
“探索”按钮实例化一个新的作战对象。在Combat.cs的构造器中,它将自己当前的敌人场=设置为随机怪物生成器的结果

只有这样,我才能向战斗订阅更新UI方法。然后,我运行“开始战斗”方法,启动事件(并将很快执行其他操作)

这个解决方案的问题是,我想用运行事件确定器函数的代码替换
onExploreButtonClicked
代码(如上),该函数是从一个单独的类调用的。确定者可以提出的一个选项是实例化一个新的作战对象。在新类中调用该对象后,我将无法从那里订阅该事件

我希望这个问题有意义。最理想的情况是,创建新的作战对象将在构造器中有一行“ping”用户界面,以打开一个新表单、更改第一个表单上的标签或类似的内容。如果我创建的战斗对象没有参数,它将创建一个随机怪物。但是,我还需要能够为战斗对象提供一个参数,该参数将启动与特定敌人的战斗


还是很新的编码,所以如果这可能没有意义,我可以发送一些源代码给别人!谢谢你们

不要描述代码,展示代码。不要描述代码,展示代码。