Firstly, you need to separate the variable and the object. A variable is dynamic if it is defined as dynamic
. That is all. There is nothing more. A field or property would be annotated with the [Dynamic]
attribute, i.e.
public dynamic Foo {get;set;}
is actually:
[Dynamic]
public object Foo {get;set;}
This basically acts as a prompt for the compiler to access the object via the dynamic
API rather than via the OOP API.
An object supports full dynamic
capabilities if it implements IDynamicMetaObjectProvider
- however, such an object can be accessed via both the dynamic
API and via the regular OOP API (it can have both). Equally, an object that doesn't implement IDynamicMetaObjectProvider
can be accessed via either API (but: only the public members will be available via dynamic
).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…