gpt4 book ai didi

inheritance - 从继承自 DynamicObject 的类继承

转载 作者:行者123 更新时间:2023-12-02 04:16:56 25 4
gpt4 key购买 nike

我正在试验 C# 4.0 的动态对象模型。

我创建了一个名为“Block”的抽象类,它继承自 DynamicObject。它覆盖 TryGetMember 和 TrySetMember。

此外,我创建了一个名为“Brush”的可用类,它继承自“Block”。我希望它可以动态使用。

但是当我从它创建一个动态对象并尝试访问一个运行时绑定(bind)的成员时,它向我抛出一个异常,告诉我该成员不存在。抽象父类的重写 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;
}

}


}

关于inheritance - 从继承自 DynamicObject 的类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2433806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com