是对象类型可以充当动态类型
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
之类的东西,但这是 完全不同的乐趣 .
我有一个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
之类的东西,但这是 完全不同的乐趣 .