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

次のメソッドを使用して、すべてのプロパティ値を列挙します。

        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 に答える
1

リフレクションでそれらにアクセスできますが、これは「通常の」方法ではありません。

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

「よりクリーン」にしたい場合は、プロパティを仮想にする必要があります。

于 2013-09-16T09:26:17.280 に答える
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 に答える