DynamicObjectから継承したクラスからの継承
-
19-09-2019 - |
質問
私はC#4.0の動的なオブジェクトモデルを試しています。
私はDynamicObjectから継承「ブロック」という名前の抽象クラスを作成しました。それはTryGetMemberとTrySetMemberを上書きします。
また私は「ブロック」から継承する「ブラシ」という名前の使用可能なクラスを作成しました。私はそれが動的に使用できるようにしたいです。
しかし、私はそれから動的オブジェクトを作成し、実行時バインドメンバーにアクセスしようとすると、それはメンバーが存在しないことを私に言って例外で私を毛皮。抽象親クラスのオーバーライドされTryGetMemberまたはTrySetMemberメソッドが呼び出さ取得されていません。
予想されるこの動作ですか
ありがとうございます!
解決
あなたは言うためにそのハードので、任意のコードを投稿していないが、ここで間違いなく作品のサンプルです。それは私が今日読んでいたものの修正版です。ホープは役立ちます。
namespace DynamicStuff
{
public class Program
{
static void Main(string[] args)
{
dynamic brush = new Brush();
brush.Handle = "Wooden";
brush.Colour = "Red";
Console.WriteLine(brush.Handle + " " + brush.Colour);
Console.WriteLine(
"Number of dynamic properties:" + brush.Count);
}
}
public class Brush : Block
{
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
Console.Out.WriteLine("About To call TryGetMember base");
object res = null;
bool retVal = base.TryGetMember(binder, out res);
result = res;
return retVal;
}
public override bool TrySetMember(System.Dynamic.SetMemberBinder binder, object value)
{
Console.Out.WriteLine("About to call TrySetMember base");
return base.TrySetMember(binder, value);
}
}
public abstract class Block : DynamicObject
{
private Dictionary<string, object> d = new Dictionary<string, object>();
public int Count
{
get
{
return d.Count;
}
}
public override bool TryGetMember(
GetMemberBinder binder, out object result)
{
Console.Out.WriteLine("In TryGetMember in block");
string name = binder.Name.ToLower();
return d.TryGetValue(name, out result);
}
public override bool TrySetMember(
SetMemberBinder binder, object value)
{
Console.Out.WriteLine("In TrySetMember in block");
d[binder.Name.ToLower()] = value;
return true;
}
}
}
所属していません StackOverflow