首页 > 解决方案 > 如何定义具有类型作为值的属性

问题描述

我想FormAbout在一个类中定义一个属性(名为 ),以便使用该对象的人可以分配一个派生类型IFormAbout. 为此,我有一个接口和一个实现:

public interface IFormAbout : IDisposable
{
    void ShowAbout();
}

public partial class MyFormAbout : Form, IFormAbout
{
    public void ShowAbout()
    {
        base.ShowDialog();
        // ...
    }

    // ...
}

在这里,Form我想定义的主要属性是:

public partial class FormMain : Form
{
    // --- This is what I don't know how to do --- //
    public Type<IFormAbout> FormAbout { get; set; }
    // ------------------------------------------- //

    private void SomeMethod()
    {
        using (FormAbout frm = new FormAbout())
        {
            frm.ShowAbout();
            // ...
        }
    }
}

该属性将以某种方式设置如下:

formMain1.FormAbout = typeof(MyFormAbout);

有可能吗?提前致谢。

标签: c#winformsproperties

解决方案


尽管您可以拥有 type 的属性Type,但这不是您想要的。您只想为该MyFormAbout属性分配一个新实例,不是吗?所以属性的类型变成IFormAbout

public partial class FormMain : Form
{
    public IFormAbout FormAbout { get; set; }

    private void SomeMethod()
    {           
        FormAbout.ShowAbout();
        // ...
    }
}

现在您不需要指定类型,而是指定它的具体实例

FormMain1.AboutForm = new MyAboutForm();
formMain1.SomeMethod(); // this will use the aboutForm from above

推荐阅读