0

实际上,我想在方法中访问基类的属性,而不是直接实例化该对象。下面是代码,我正在处理:

public class Test
{
    public static void Main()
    {
        drivedclass obj = new drivedclass();
        obj.DoSomething();
    }
}

public class drivedclass : baseclass
{
    public void DoSomething()
    {
        LoadSomeThing();
    }
}

public class baseclass
{
    public string property1
    {
        get;
        set;
    }
    public string property2
    {
        get;
        set;
    }
    public void LoadSomeThing()
    {
        //here I want to access values of all properties
    }
}

我想知道是否有办法,我可以访问同一类的方法中的属性,并且该类是基类。

4

6 回答 6

2

您可以按原样使用property1和。property2

但是,请注意,LoadSomeThing()您将无法访问 的任何属性drivedlcass,因为根据定义,基类无法看到其派生类的属性。

于 2013-09-16T09:25:06.997 回答
1

您可以通过反射访问它们,但这不是“正常”方式。

foreach(PropertyInfo prop in this.GetType().GetProperties())
{
    prop.SetValue(this, newValue);
}

如果你想让它“更干净”,你应该使属性虚拟化。

于 2013-09-16T09:26:17.280 回答
1

使用以下方法枚举所有属性值:

        public void EnumerateProperties()
    {
        var propertiesInfo = this.GetType().GetProperties();
        foreach (var propertyInfo in propertiesInfo)
        {
            var val = propertyInfo.GetValue(this, null);
        }
    }
于 2013-09-16T09:26:37.470 回答
0

问题很不清楚,但如果您希望访问您的属性,它们在基类和派生类中都很好地存在。因此,如果您 s = obj.property2在主类测试中这样做,那应该是可用的。

public class Test {
    public static void Main( ) {
      drivedclass obj = new drivedclass( );
      obj.DoSomething( );
      string s = obj.property2 ;
    }
  }
于 2013-09-16T09:27:03.527 回答
0

你总是可以明确表示:

public class DerivedClass : BaseClass
{
    public string Property3
    { get; set; }

    public void DoSomething ()
    {
        LoadSomeThing();
    }

    public override void LoadSomeThing ()
    {
        base.LoadSomeThing();
        Console.WriteLine(Property3);
    }
}

public class BaseClass {
    public string Property1
    { get; set; }
    public string Property2
    { get; set; }

    public virtual void LoadSomeThing()
    {
        Console.WriteLine(Property1);
        Console.WriteLine(Property2);
    }
}
于 2013-09-16T09:28:57.870 回答
0

您可以简单地尝试:this.property1

于 2013-09-16T09:30:42.890 回答