以下是代码,我想了解一些事情:
public class Test {
public void dosomething( ) {
Derived2 d2 = new Derived2 () ;
Base bobject = d2;
string str = "str" ;
bobject.Method1( str ); // I want to call Method1 of Derived1 class
}
}
public class Derived2 : Derived1 {
public void Method1( string s ) {
}
}
public class Derived1 : Base {
public override void Method1( double d ) {
}
public override void Method2( double d ) {
}
}
public abstract class Base {
public abstract void Method1( double d );
public abstract void Method2( double d );
}
我想知道,当我们将派生类对象分配给基本抽象类对象时会发生什么。我知道实例化抽象类是不可能的。在我的例子中,我派生类 Derived1 并将 Derived2 类的对象分配给基础抽象类对象。现在我想访问接受字符串参数的 Dervied2 类方法 Method1 。不知何故,我无法访问此方法。存在多个从基本抽象类派生的类。我想保持通用。
答案 0 :(得分:1)
当我们将派生类对象分配给基本抽象类对象
时会发生什么
您的代码中没有对象分配,变量分配。
赋值后,变量bobject
引用与d2
相同的对象。对象类型(以及对象状态中的任何内容)保持不变。
现在我想访问接受字符串参数
的Dervied2类方法Method1
如果不将bobject
转换为Derived2
,您就无法在样本中执行此操作:
((Derived2)bobject).Method1(str)
我想保持通用
然后,您不应该尝试访问不属于基类的成员。
答案 1 :(得分:0)
bobject
是Base
的一种类型,有两种接受double的方法,而不是字符串(该方法在Derived2
的实现中定义)。
为了满足您的需求,您需要将bobject
投射到Derived2,例如:
var d3 = bobject as Derived2;
d3.Method1("String");
答案 2 :(得分:0)
你甚至可以做到
(bobject as Derived2).Method1(string);
这是因为分辨率基于变量类型。