如果您真的缺少魔法方法,您可以在 C# 中创建一个动态基类(前提是您使用的是 .NET 4.0+):
public abstract class Model : DynamicObject
{
public virtual object __get(string propertyName)
{
return null;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if ((result = this.__get(binder.Name)) != null)
return true;
return base.TryGetMember(binder, out result);
}
public virtual void __set(string propertyName, object value)
{
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
this.__set(binder.Name, value);
return true;
}
}
创建一个派生自该类型的新类型并使用“动态”关键字进行实例化:
dynamic myObject = new MyModelType();
myObject.X = 42; // calls __set() in Model
Console.WriteLine(myObject.X); // calls __get() in Model
简而言之,如果您愿意,您可以在 C# 中实现非常相似的行为(请参阅MSDN 上的DynamicObject)。