如何通过C#中的一些强制要求将派生类链接到基类构造函数

时间:2019-05-01 05:35:59

标签: c#

如果我有一个派生类和一个基类,但是该基类具有必需的参数-我该如何使它成为必需,派生类必须使用必需的参数来调用基类?

我正在尝试使某个脚本尽可能容易地编写自己的代码,但是让他们不知道他们必须使用自己的构造函数和必需的参数调用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)的情况?

2 个答案:

答案 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");