繁体   English   中英

C#:反射:子类的Access属性

[英]C#: Reflection: Access property of subclass

我试图通过反射访问子类的属性。 但这是行不通的。 如何获得子类的所有属性?

这是我尝试通过反射访问子类的属性的类。 我尝试了类结构的抽象和部分,但都无法正常工作。

public abstract class FakeDbContext
{
    public FakeDbSet<T> Set<T>() where T : class, IObjectState
    {
        foreach (PropertyInfo property in GetType().GetProperties())
        {
            if (property.PropertyType == typeof(FakeDbSet<T>))
                return property.GetValue(this, null) as FakeDbSet<T>;
        }
        throw new Exception("Type collection not found");
    }
}

带有参数的子类

public class MockDbContext : FakeDbContext
{
    private FakeDbSet<Address> Addresses { get; set; }
    private FakeDbSet<EmailAddress> EmailAddresses { get; set; }
    private FakeDbSet<PhoneNumber> PhoneNumbers { get; set; }
    private FakeDbSet<BaseContact> Contacts { get; set; }
    private FakeDbSet<Environment> Environments { get; set; }
    private FakeDbSet<Data.Entities.InformationService> InformationServices { get; set; }
    private FakeDbSet<UserEnvironmentConfiguration> UserEnvironmentConfigurations { get; set; }
    private FakeDbSet<Customer> Customers { get; set; }
    private FakeDbSet<UserEnvironmentConfigurationSet> UserEnvironmentConfigurationSets { get; set; }

    public MockDbContext()
    {
        Addresses = new FakeDbSet<Address>();
        EmailAddresses = new FakeDbSet<EmailAddress>();
        PhoneNumbers = new FakeDbSet<PhoneNumber>();
        Contacts = new FakeDbSet<BaseContact>();
        Environments = new FakeDbSet<Environment>();
        InformationServices = new FakeDbSet<Data.Entities.InformationService>();
        UserEnvironmentConfigurations = new FakeDbSet<UserEnvironmentConfiguration>();
        Customers = new FakeDbSet<Customer>();
        UserEnvironmentConfigurationSets = new FakeDbSet<UserEnvironmentConfigurationSet>();

        InitData();
    }
}

要获取私有属性,您需要使用BindingFlags.NonPublic方法使用GetProperties的重载,该重载将BindingFlags作为参数。

foreach (PropertyInfo property in GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic))
{
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM