Off*_*nix -2 c# inheritance casting downcast
所以我无法想象我的生活.我尝试过多种形式的演员.
这是父母.
/// <summary>
/// Colour Parent
/// </summary>
public class Colour
{
#region Public Fields
public float R;
public float G;
public float B;
public float A;
#endregion Public Fields
}
Run Code Online (Sandbox Code Playgroud)
而这就是孩子.哪个有预先定义的变量.意味着它具有向下传播所需的所有信息.
/// <summary>
/// Data strucutre extension of Base.Colour, Used for the variables stored inside the glow object in memory
/// </summary>
public class GlowStruct : Colour
{
public bool RWO = true;
public bool RWUO = true;
}
Run Code Online (Sandbox Code Playgroud)
我试着用它来施展.
return Base.Blue as GlowStruct;
Run Code Online (Sandbox Code Playgroud)
Base.Blue是Color类的静态成员.使用"is"返回false.
不知道为什么你需要Base.Blue的定义看作是它的正数.我已经提到它是一个静态类.
public static Colour Blue = new Colour { R = 0, G = 0, B = 255, A = 255 };
Run Code Online (Sandbox Code Playgroud)
A GlowStruct是a Colour,但这并不意味着a Colour是a GlowStruct.
如果Blue是一个类型Colour,你不能GlowStruct直接将其转换为直接因为GlowStruct需要Colour该类根本没有的附加信息- 这就是is操作符首先存在的原因- 允许您在确定实例的类型时只有一些基类或接口类型的引用.
更一般地说,派生类是它的基类的特定类型,但是类不是可能从它派生的任何类的类型 - 如果是这种情况,整个类型系统将变得多余,因为任何类型最终都源于此object,因此任何东西都可以被铸造成任何其他东西.
另一个例子 - 老虎是一种猫科动物(基本上是猫科动物),所有猫科动物都是哺乳动物,所有哺乳动物都是动物,但这并不意味着任何动物都是老虎,猫,甚至哺乳动物.
转换为c#:
class Animal {}
class Mammal : Animal {}
class Felidae : Mammal {}
class Tiger : Felidae {}
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
Animal myTiger = new Tiger();
var mammal = myTiger as Mammal;
var felidae = myTiger as Felidae;
var tiger = myTiger as Tiger;
Run Code Online (Sandbox Code Playgroud)
但如果你尝试做这样的事情,你就是 -
Animal myTiger = new Animal();
var mammal = myTiger as Mammal;
var felidae = myTiger as Felidae;
var tiger = myTiger as Tiger;
Run Code Online (Sandbox Code Playgroud)
那么mammal,felidae而且tiger都是null,因为动物可能是一只毒蛇,它不是哺乳动物,不是猫,而且不是老虎.