c# - 在组合框中查看接口列表
问题描述
我实施了一个项目,我为成员开设了一个班级,但每个成员都有一种计算其经济回报的方法。
public class Person : EntityValidator
{
[DisplayName("Name")]
[Required(ErrorMessage = "{0} *")]
[RegularExpression(@"^[\u0600-\u06ff\s]+$", ErrorMessage = " ")]
public string Name { get; set; }
[Required(ErrorMessage = "{0} ")]
[DataType(DataType.CreditCard)]
[RegularExpression(@"^\d{14}$",
ErrorMessage = "ا")]
public string NationalId { get; set; }
[DataType(DataType.PhoneNumber)]
[Phone]
public string Phone { get; set; }
public ICollection<Salary> Salarys { get; set; }
public virtual MemberShip MemberShip { get; set; }
所以我创建了一个计算方法的接口,如代码所示。
interface IArithmetiCoperation
{
decimal MonetaryAdvantage();
double DurationBetween();
}
现在首先:我需要从这个接口继承的类出现在组合中,当这个类被识别时,实现它的方法并给我相关的结果。前提是类别的名称出现在代码中的名称表达了它们的特征,而不是它们的名称。
第二:有没有比接口方法更好的建议?
解决方案
我需要从这个接口继承的类出现在组合中,当这个类被识别时,实现它的方法
为此,您可能需要考虑使用Reflection
. 反射允许您像处理数据一样处理代码(在非常笼统的意义上)
您可以找到实现接口的所有项目的一般方法是
- 获取要搜索的程序集
- 获取该程序集中的所有类型
- 搜索这些类型并获取实现该接口的类型。
您可以使用typeof(ObjectThatYouWantToGetAssemblyOf).Assembly
. 您可以使用它来搜索类型。
您可以使用Assembly.GetTypes()
来获取程序集定义/实现的所有类型。
最后,您可以LINQ
对类型运行查询以搜索实现接口的类型,例如:Types.Where(type => type.GetInterface("InterfaceToLookFor") != null )
将它们放在一起,您可以将它们放在一个列表中并将其绑定到一个列表框!
这是一个非常简单的片段,可以帮助您入门
namespace StackOverflowQuestions
{
public class Program
{
public static void Main()
{
var classesThatImplementIHuman = typeof(Program).Assembly.GetTypes().Where(x => x.GetInterface("IHuman") != null);
Console.WriteLine(string.Join(", ", classesThatImplementIHuman));
Console.ReadLine();
}
}
public interface IHuman { }
public interface IAnimal { }
public class Dog : IAnimal { }
public class Cousin : IHuman { }
public class Neighbor : IHuman { }
public class Person : IHuman { }
public class Friend : IHuman { }
}
推荐阅读
- opencv - 如果项目中未导入模块 OpenCV,如何通过 Pyinstaller 导出模块?
- android - Android Studio 错误:public inline operator fun BigInteger.times(other: BigInteger): BigInteger defined in kotlin
- python - HTML 文件仅显示来自 python walk 的最后一个文件
- php - 当我提交表单时,我的收藏被删除了 - symfony 2.8
- parsing - 如何使用 FParsec 解析固定字符串
- java - 屏幕录像机应用程序在自定义 Rom 上引发错误
- ubuntu - WSL 中的 Julia 不打开 Jupyter 笔记本
- docker - Docker - 在 docker run 中分配 ipv6 地址
- android - DragLinearLayout 属性
- c# - 创建具有可变逻辑和可变变量计数的 C# 算法