c#实现接口的主窗体

c#实现接口的主窗体,c#,visual-studio,oop,interface,C#,Visual Studio,Oop,Interface,我在主窗体上实现接口时遇到问题。这个想法是要有一个接口,一个向接口发送消息的控制器类和实现接口的主窗体。这将被另一个类的对象用来“告诉”主窗体以更新某些内容。我的问题是,我无法解决如何将我的主窗体分配给控制器类中接口类型的实例变量。如果我没有百分之百地说清楚,我道歉。以下类别的示例: 主表单 using System; using System.Windows.Forms; namespace InterfaceProject { public partial class Form1

我在主窗体上实现接口时遇到问题。这个想法是要有一个接口,一个向接口发送消息的控制器类和实现接口的主窗体。这将被另一个类的对象用来“告诉”主窗体以更新某些内容。我的问题是,我无法解决如何将我的主窗体分配给控制器类中接口类型的实例变量。如果我没有百分之百地说清楚,我道歉。以下类别的示例:

主表单

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");
        }
    }
}
控制器类

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();
}

是的,就是这样。谢谢你们的帮助!因为我们的答案基本相同,而且只相隔一分钟,所以我删除了我的答案,并对你的答案投了更高的票。