gpt4 book ai didi

c# 实现接口(interface)的主窗体

转载 作者:行者123 更新时间:2023-11-30 21:36:12 25 4
gpt4 key购买 nike

我在主窗体上实现接口(interface)时遇到问题。这个想法是有一个接口(interface),一个将消息发送到接口(interface)的 Controller 类和实现接口(interface)的我的主窗体。这将被另一个类的对象用来“告诉”主窗体更新某些东西。我遇到的问题是我不知道如何将我的主窗体分配给 Controller 类中接口(interface)类型的实例变量。如果我没有 100% 清楚这一点,我深表歉意。以下类的示例:

主窗体

using System;
using System.Windows.Forms;

namespace InterfaceProject
{
public partial class Form1 : Form, IMessage
{
public Form1()
{
InitializeComponent();
}

MessageController ctrl = new MessageController();

private void Form1_Load(object sender, EventArgs e)
{
ctrl.Greeting();
}

public void Hello()
{
//Do some stuff to the form
MessageBox.Show("Hello World");
}
}
}

Controller 类

namespace InterfaceProject
{
class MessageController
{
//Instance Variables
private IMessage messageClient;

//Constructor
public MessageController()
{
messageClient = Form1;
}
public void Greeting()
{
messageClient.Hello();
}
}
}

界面

namespace InterfaceProject
{
interface IMessage
{
void Hello();
}
}

最佳答案

问题是 Form1 在您的 MessageController 类中不可用。您需要将它作为参数传递给 MessageController 构造函数或创建一个 setter 函数...

using System;
using System.Windows.Forms;

public partial class Form1 : Form, IMessage
{
private MessageController ctrl;

public Form1()
{
InitializeComponent();
ctrl = new MessageController(this);
}

private void Form1_Load(object sender, EventArgs e)
{
ctrl.Greeting();
}

public void Hello()
{
MessageBox.Show("Hello World");
}
}

class MessageController
{
private IMessage messageClient;

public MessageController(IMessageClient client)
{
messageClient = client;
}
public void Greeting()
{
messageClient.Hello();
}
}

interface IMessage
{
void Hello();
}

关于c# 实现接口(interface)的主窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48427551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com