我试图实现Base类和Derived类的调用方法.但是,如果我正确地做的话,我有点困惑.我想从Base类中设置值并在Derived类中使用它们.
namespace Inheritance
{
using System;
public class BaseClass
{
public BaseClass() { }
protected string methodName;
protected int noOfTimes;
public void Execute(string MethodName, int NoOfTimes)
{
this.methodName = MethodName;
this.noOfTimes = NoOfTimes;
}
}
public class DerivedClass : BaseClass
{
public DerivedClass() : base() { }
public void Execute()
{
Console.WriteLine("Running {0}, {1} times", base.methodName, base.noOfTimes);
}
}
public class Program
{
static void Main(string[] args)
{
DerivedClass d = new DerivedClass();
d.Execute("Func", 2);
d.Execute();
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:如果只使用1次执行而不是2次,我可以达到与上述相同的效果吗?
我希望上面的例子很清楚.如果不然,请告诉我,我会提供更多详情.
谢谢
免责声明,我的回答假设你想要一个围绕方法的继承及其实现的解决方案.提供的其他答案也是问题的良好解决方案.
听起来你想要覆盖派生类中的方法.为此,基类需要标记方法virtual或abstract.但是,在您的情况下,派生类方法签名是不同的.我会假设这是一个错误,不理解它是如何工作的,所以我已经为你纠正了它.
在这个例子中,派生类用overrideC#关键字标记方法.然后我调用,base.Execute(MethodName, NoOfTimes);因为我想在我的重写实现中使用基类的实现.然后我输入我自己的代码.
base 是另一个关键字,它允许您在您所在的类的正下方访问基类中的成员,而不会让继承链将您推回到派生成员中.
abstract值得一读,但在这种情况下不需要(它有不同的行为,virtual但也可以与之结合使用override).
namespace Inheritance
{
using System;
public class Program
{
internal protected class BaseClass
{
public BaseClass() { }
protected string methodName;
protected int noOfTimes;
public virtual void Execute(string MethodName, int NoOfTimes)
{
this.methodName = MethodName;
this.noOfTimes = NoOfTimes;
}
}
internal class DerivedClass : BaseClass
{
public DerivedClass() : base() { }
public override void Execute(string MethodName, int NoOfTimes)
{
base.Execute(MethodName, NoOfTimes);
Console.WriteLine("Running {0}, {1} times", base.methodName, base.noOfTimes);
}
}
static void Main(string[] args)
{
DerivedClass d = new DerivedClass();
d.Execute("Func", 2);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个示例中有一些代码格式和命名怪癖,但我会单独留下它以尽可能接近原始代码.
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |