如何定义具有类型作为值的 属性
How to define a property that has a type as a value
我想在 class 中定义一个 属性(名为 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);
可以吗?提前致谢。
尽管您可以 有一个 属性 类型 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
终于找到解决问题的好办法了,分享给大家。
通过将我的 class FormMain
声明为通用的,可以设置 IFormAbout
的显式实现而不实例化它:
public partial class FormMain<About> : Form where About : IFormAbout
{
private void SomeMethod()
{
using (About frm = Activator.CreateInstance<About>())
{
frm.ShowAbout();
// ...
}
// ...
}
}
然后,我们只需要像这样声明一个 FormMain
的实例:
FormMain<MyFormAbout> frm = new FormMain<MyFormAbout>();
足以满足我的目的。
我想在 class 中定义一个 属性(名为 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);
可以吗?提前致谢。
尽管您可以 有一个 属性 类型 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
终于找到解决问题的好办法了,分享给大家。
通过将我的 class FormMain
声明为通用的,可以设置 IFormAbout
的显式实现而不实例化它:
public partial class FormMain<About> : Form where About : IFormAbout
{
private void SomeMethod()
{
using (About frm = Activator.CreateInstance<About>())
{
frm.ShowAbout();
// ...
}
// ...
}
}
然后,我们只需要像这样声明一个 FormMain
的实例:
FormMain<MyFormAbout> frm = new FormMain<MyFormAbout>();
足以满足我的目的。