好的,所以我一直在寻找一段时间试图找到这个问题的答案,但很难说出来,所以我在这里问。
我正在继承一个类
Class A (int a, int b, int c)
public A(int a, int b, int c)
{
}
Class B : A
public B(int a, int b, int c) base: (a, b, c)
public void blah(int something)
{
}
为什么我不能这样做然后呢:
B classb = new B(1,2,3);
classb.blah(4);
相反,我必须做
public virtual void blah(int something)
{
}
在A班,然后在B班:
public override void blah(int something)
{
//method to be used in B but not A.
}
所以,即使我无意在A类中使用该方法,我还是要声明虚拟?所以如果我继承C:B那么什么呢?我必须在A中为C声明东西吗?
答案 0 :(得分:2)
为什么我不能这样做然后呢:
B classb = new B(1,2,3); classb.blah(4);
你绝对可以。除了代码中的语法错误之外,完全没有问题。这是一个完整的例子,编译和运行没有问题。 (我已经为blah
方法同时修复了命名约定违规。)
using System;
class A
{
public A(int a, int b, int c)
{
}
}
class B : A
{
public B(int a, int b, int c) : base(a, b, c)
{
}
public void Blah(int something)
{
Console.WriteLine("B.Blah");
}
}
class Test
{
static void Main()
{
B b = new B(1, 2, 3);
b.Blah(10);
}
}
答案 1 :(得分:1)
你的假设没有任何意义,至少和我理解的一样多。
请考虑以下示例:
public class Base {}
public class Derived : Base {
public void DerivedSpecificMethod() {
}
}
如果你这样做
Derived d = new Derived(); //as you specify in code example
d.DerivedSpecificMethod(); //you CAN do this.
如果你写的话可能需要virtual
:
Base b = new Derived(); //note, I use a Base here on left side of equation
b.DerivedSpecificVirtualMethod(); //virtual method call
答案 2 :(得分:1)
除此之外,您的代码实际上并不是有效的C#,这没有任何问题。我想这就是你想要的:
class A
{
public A(int a, int b, int c)
{
}
}
class B : A
{
public B(int a, int b, int c) : base(a, b, c)
{
}
public void blah(int something)
{
}
}
然后这没问题:
B classb = new B(1,2,3);
classb.blah(4);
答案 3 :(得分:0)
您的代码无法编译。您不必使用virtual
说明符,这可以按预期工作:
class App
{
static void Main()
{
B classb = new B(1,2,3);
classb.blah(4);
}
}
class A
{
public A(int a, int b, int c)
{
}
}
class B : A
{
public B(int a, int b, int c): base (a, b, c)
{
}
public void blah(int something)
{
Console.WriteLine(something);
}
}