Dam*_*ury 2 c# casting class object
这可能是重复的,但我找不到类似的问题.我不明白如何在没有数据丢失的情况下对基类型进行隐式转换.例如,我创建了这个类Person:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,当我做以下时:
object personAsObject = new Person { Name = "Foo", Age = 1 };
var person = (Person) personAsObject;
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
Run Code Online (Sandbox Code Playgroud)
怎么样object能够保持属性的值Name,并Age因为它只有4种方法Equals,GetHashCode,GetType和ToString?为什么对子类的强制转换会抛出InvalidCastException?我希望这是可能的,因为如果成员不是私人的,那么他们就会被继承.
一切都与参考有关.
personAsObject不是一个实例的的对象.
当您调用时new Person,您Person在托管内存中创建了一个实例.
该变量personAsObject是一个引用:指向Person对象所在的托管内存位置的指针.
这同样适用于person:它不是一个实例的Person,它是为一个参考Person(这恰好是同一对象personAsObject所引用)在存储器中.
VARIABLES MANAGED MEMORY
========= ==============
personAsObject----| +-----------------+
|---->| Person Instance |
person------------| +-----------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |