如果我有一个派生类和一个基类,但是该基类具有必需的参数-我该如何使它成为必需,派生类必须使用必需的参数来调用基类?
我正在尝试使某个脚本尽可能容易地编写自己的代码,但是让他们不知道他们必须使用自己的构造函数和必需的参数调用base还是很容易的将无法正常工作,但是似乎没有一种可以强制抽象方法或接口的强制方式...
这就是我所拥有的:
public abstract class A {
public a {private set; get;}
public A(){
this.a = 0;
}
public A (int a){
this.a = a; // needed to be called
}
}
public class B : A
{
// some user defined class forgets base constructor
}
然后他们尝试:
B b = new B(someNumber); // error
有没有办法解决合同B必须如何从其自己的构造函数调用: base(someNumber)
的情况?
答案 0 :(得分:2)
我不确定您是如何陷入困境的,但是您的代码没有编译,因此您需要(按法律)实现构造函数,即基类/派生类是如何通过设计工作的
public abstract class A
{
public int a { private set; get; }
public A(int a)
{
this.a = a; // needed to be called
}
}
public class B : A
{
// some user defined class forgets base constructor
public B(int a) : base(a)
{
}
}
答案 1 :(得分:0)
尝试以下代码。在基类中声明一个构造函数。
public abstract class Base
{
public Base(string param1, string param2)
{
}
}
使用派生类构造函数中的基类初始化。如果不声明任何无参数的默认构造函数,则派生类的使用者将被强制使用参数化构造函数实例化派生类,最终将击中基类构造函数。
public class Derived : Base
{
public Derived(string param1, string param2): base(param1, param2)
{
}
}
例如:
//This will first call base class constructor
//then it will hit derived class constructor
Derived derived = new Derived("param1", "param2");