c# - 如何定义具有类型作为值的属性
问题描述
我想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 的属性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
推荐阅读
- python - 将参数传递给作为值存储在字典中的函数
- c# - 为什么从 Powershell 调用时 Webservice 中有额外的参数?
- python - pycharm 和 Linux 在从不同目录导入模块时显示不同的错误
- list - Haskell 对单个列表的元素进行配对
- c# - Asp.Net Core Razor Pages:asp-route 使用同一页面上的输入值
- time - 如何测量 Julia 中每个循环步骤的执行时间?
- javascript - 阻止在 Internet Explorer 中查看网页
- python - PANDAS 根据通配符输入特定 ID
- node.js - CloudFormation 更新堆栈
- laravel - Livewire Alpinejs 跨文件发射/调度变量