1

私はこのようなオブジェクトを持っています

public class Simple
{
    public string Value
    {
      get { return GetProperty(); }
    }

    // different methods, fields, events, etc.
}

クラスSimpleのインスタンスを同等のオブジェクトに置き換えることは可能ですが、セッターに置き換えますか?

実装方法...

private object Substitution(object simple)
{
    object newSimple;

    // implementations

    newSimple.Value = "data";
    return newSimple;
}

このようなものを持つために

public class Simple
{
    public string Value { get; set; }

    // my methods, fields, events ...
}

クラスを作成してSystemObjectから継承することを考えました。その後、さまざまな動的プロパティを作成できますが、できませんでした:(

または、このオブジェクトから継承して (どのように?)、プロパティをオーバーライドしようとしますか?

ありがとう

4

2 に答える 2

0

プロパティゲッターのみを定義するインターフェースを常に使用する必要があります。次に、実装にプロパティセッターがありますか?

class Program
{
    static void Main(string[] args)
    {
        IMyClass myA = new ClassA{ Property = "Class A" };

        Console.WriteLine(myA.Property);

        // can't do this
        // myA.Property = "New Property"; 

        // can do this
        (myA as ClassA).Property = "New Property"; 
        Console.WriteLine(myA.Property);
    }
}

interface IMyClass
{
    string Property { get; }
}

class ClassA : IMyClass
{
    public string Property { get; set; }
}

それができない場合は、明示的なキーワードを使用してユーザー定義の変換を行うことができます。詳細については、MSDNを参照してください。

于 2012-05-24T18:13:24.173 に答える
0

ロードされた型の定義または構造を実行時に変更することはできません。

プロパティ セッターを追加して、同様のプロパティとフィールドのセットを持つ新しい型を作成できる可能性があります。ただし、ほとんどの場合、既存のコードは新しい型を認識しないため (実行時に生成されるため)、これは限られた用途しか使用できません。

通常、型内で実行時の拡張性が必要な場合は、 を使用する、 を使用する、またはコンパイル時に不明な「追加」情報をクラス内に格納するためのその他のメカニズムを使用するなど、他のオプションがありDictionary<T,U>ます。dynamicExpandoObject

于 2012-05-24T18:06:11.200 に答える