所以我遇到了一些代码
IFirst x { get; private set; }
...
x = GetItem();
if (x == null) return;
ISecond y = x as ISecond; // this is the line I have issue with
GetItem
在
public IFirst GetItem() {
//abridge
return new ConcreteA();
}
ConcreteA
定义为
class ConcreteA : IFirst, ISecond {
}
让我感到困惑的部分是当我向下转换项目并从函数返回它时,项目似乎没有失去其完整的标识。这意味着如果我将ConcreateA
返回为IFirst
,我希望它只是一个IFirst
对象。
但是从第一个块中的代码来看,即使明确定义为IFirst
仍可以访问其ISecond
身份,但x还是可以的,我假设是否需要访问其ConcreteA
身份? / p>
这是所期望的,还是我缺少一段代码来维持某个地方的转换?
在编程或C#中专门调用的这种行为或模式是什么?
答案 0 :(得分:0)
这是预期的,并且是面向对象范例的一部分,并非特定于c#。
您可以将变量视为方框。不同的对象适合不同的盒子,但它们始终是同一对象。投射只会改变盒子的形状。
在您的情况下,您垂头丧气,因此您将ConcreteA放在一个更受限制的框中(在此类情况下)。