是对象类型可以充当动态类型

is object type can act as dynamic type

我有一个class定义如下:

public class Foo
    {
        private int _LengthVar;
        private string _StringVar;
        public string StringVar
        {
            get { return _StringVar; }
            set { _StringVar = value;
            _LengthVar = value.Length;
            }
        }
        public int LengthVar
        {
            get { return _LengthVar; }
        }

    }

我已经创建了一个对象 Foo class =>

 object obj = new Foo();

当我尝试使用 obj.StringVar="some val"; 为 属性 StringVar 分配一些值时,它不允许;其中 as ((Foo)obj).StringVar = "this is another value"; 是一个有效的赋值。 但是当我删除分配和 运行 程序并检查断点时,obj 显示 Foo class 的所有属性。

我的疑惑来了; 对象是否具有动态行为

答案是否定的,也不应该

object obj = new Foo()

意味着您将 Foo 实例转换为 "object" 类型的引用。

而您现在只针对 "object"。除非你明确地将它投回去,否则不会狗。

例如

Animal someAnimal = new Dog();
Animal anotherAnimal = new Bird();

当您使用动物实例时,思考为什么动物实例没有称为 Bark()/Fly() 的行为是完全不合逻辑的。

But when i remove the assignment and run the program and check with a break-point, The obj shows all the properties of the Foo class.

调试器/IDE正在检查实际对象 - 而不是变量。本例中的 变量 被键入为 object;但是 它指向的对象:是一个 Foo,一直是 Foo,并且永远是 Foo。您可以通过以下方式查看:

var typeName = obj.GetType().Name; // Foo, not object

(同样,查看实际对象,而不是类型)

但具体来说:

is objects have dynamic behavior?

不,他们没有。除非你通过 dynamic 使用 DynamicObject 之类的东西,但这是 完全不同的乐趣 .