Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:反射:子类的访问属性_C#_System.reflection - Fatal编程技术网

C#:反射:子类的访问属性

C#:反射:子类的访问属性,c#,system.reflection,C#,System.reflection,我试图通过反射访问子类的属性。但这不起作用。如何访问子类的所有属性 在这个类中,我试图通过反射访问子类的属性。 我尝试了抽象类结构和局部类结构,但两者都不起作用 public abstract class FakeDbContext { public FakeDbSet<T> Set<T>() where T : class, IObjectState { foreach (PropertyInfo property in GetType(

我试图通过反射访问子类的属性。但这不起作用。如何访问子类的所有属性

在这个类中,我试图通过反射访问子类的属性。 我尝试了抽象类结构和局部类结构,但两者都不起作用

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");
    }
}
公共抽象类FakeDbContext
{
public FakeDbSet Set(),其中T:class,IObjectState
{
foreach(GetType()中的PropertyInfo属性。GetProperties())
{
if(property.PropertyType==typeof(FakeDbSet))
将property.GetValue(this,null)作为FakeDbSet返回;
}
抛出新异常(“未找到类型集合”);
}
}
包含参数的子类

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();
    }
}
公共类MockDbContext:FakeDbContext
{
私有FakeDbSet地址{get;set;}
私有FakeDbSet电子邮件地址{get;set;}
私有FakeDbSet电话号码{get;set;}
私有FakeDbSet联系人{get;set;}
私有FakeDbSet环境{get;set;}
私有FakeDbSet InformationServices{get;set;}
私有FakeDbSet UserEnvironmentConfigurations{get;set;}
私有FakeDbSet客户{get;set;}
私有FakeDbSet userenvironment配置集{get;set;}
公共MockDbContext()
{
地址=新的FakeDbSet();
EmailAddresses=new FakeDbSet();
PhoneNumbers=new FakeDbSet();
联系人=新的FakeDbSet();
环境=新的FakeDbSet();
InformationServices=新的FakeDbSet();
UserEnvironmentConfigurations=new FakeDbSet();
客户=新的FakeDbSet();
UserEnvironmentConfigurationSets=new FakeDbSet();
InitData();
}
}

要获取私有属性,需要使用
BindingFlags。非公共的
使用重载,重载将
BindingFlags
作为参数

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

要获取私有属性,需要使用
BindingFlags.NonPublic
,使用重载,重载将
BindingFlags
作为参数

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

要获取私有属性,需要使用
BindingFlags.NonPublic
,使用重载,重载将
BindingFlags
作为参数

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

要获取私有属性,需要使用
BindingFlags.NonPublic
,使用重载,重载将
BindingFlags
作为参数

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