pau*_*sim 8 c# types derived base variable-assignment
我有一个基类和一个派生类,如下所示
public class animal
{
public string name { get; set; }
}
public class dog : animal
{
public int age { get; set; }
public string type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
animal a = new animal();
dog d = new dog();
a = d; //compiled
d = a; //Error:Cannot implicitly convert type 'animal' to 'dog'.
d = (dog)a; // compiled
Run Code Online (Sandbox Code Playgroud)
内部派生类可以分配给base但是需要进行反向显式转换?即使base和derived类都包含相同的成员,也会发现相同的结果.
当您使用显式转换时,在您的情况下,您告诉编译器您知道发生了什么.如果您要编译代码,删除d = a;,并且您尝试访问公共成员d,则会抛出异常.那是因为,在这种情况下,animal不是a dog.您明确创建了一个animal并将其分配给a.
显式转换允许您在知道转换有效时执行操作.
public class MyClass
{
public animal MyAnimal { get; private set; }
public MyClass ()
{
MyAnimal = new dog ();
}
public void SetAge (int Age)
{
((dog)MyAnimal).age = Age;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们知道MyAnimal实际上是a dog,所以我们可以对它进行显式转换.所有这一切都因为继承而起作用.因为继承不能同时工作,所以编译器不允许隐式向上转换 - 您必须明确地执行它.
我们知道当一个类继承自它的基类时,它需要公共属性和方法.你不能说你对a的引用animal总是包含a的属性和方法dog.