首页 > 解决方案 > 在组合框中查看接口列表

问题描述

我实施了一个项目,我为成员开设了一个班级,但每个成员都有一种计算其经济回报的方法。

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

现在首先:我需要从这个接口继承的类出现在组合中,当这个类被识别时,实现它的方法并给我相关的结果。前提是类别的名称出现在代码中的名称表达了它们的特征,而不是它们的名称。

第二:有没有比接口方法更好的建议?

标签: c#

解决方案


我需要从这个接口继承的类出现在组合中,当这个类被识别时,实现它的方法

为此,您可能需要考虑使用Reflection. 反射允许您像处理数据一样处理代码(在非常笼统的意义上)

您可以找到实现接口的所有项目的一般方法是

  1. 获取要搜索的程序集
  2. 获取该程序集中的所有类型
  3. 搜索这些类型并获取实现该接口的类型。

您可以使用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 { }
}

推荐阅读