2

イベントの継承をSwimmingEventとして作成する必要がありますが、コンストラクターに0個の引数が含まれていないというエラーが表示されます。問題は、どの引数が渡されるのかわからないことです。どんな助けでも大歓迎です。

//Base Class
class Event
 {
    private string m_evName;
    private string m_evDate;
    private string m_evTime;
    private string m_evFee;
    private string m_evVenue;

    private List<Athlete> m_athletes;


    public String EvName { get { return m_evName; } }
    public String EvDate { get { return m_evDate; } }
    public String EvTime { get { return m_evTime; } }
    public String EvFee { get { return m_evFee; } }
    public String Venue { get { return m_evVenue; } }


    //Getters/Setters - Making private variables avilable in public space through class method
    public Event(String EvName, String EvDate, String EvTime, String EvFee, String EvVenue)
    {
        m_evName = EvName;
        m_evDate = EvDate;
        m_evTime = EvTime;
        m_evFee = EvFee;
        m_evVenue = EvVenue;

        m_athletes = new List<Athlete>();
    }
 } 


   //child class
  class SwimmingEvent : Event
   {
    private String m_distance;
    private String m_inOutVar;

    public SwimmingEvent(String Distance, String InOrOut)
    {
        m_distance = Distance;
        m_inOutVar = InOrOut;
    }


}
4

5 に答える 5

5

SwimmingEvent はである ため、のコンストラクターEventに渡すすべての引数をEventのコンストラクターに渡す必要がありますSwimmingEvent。次に、いくつかの引数を渡す必要があります。

public SwimmingEvent(String EvName, String EvDate, String EvTime, String EvFee, String EvVenue, String Distance, String InOrOut)
:   base (EvName, EvTime, EvFee, EvVenue, Distance) {
    m_distance = Distance;
    m_inOutVar = InOrOut;
}
于 2012-04-13T14:24:16.950 に答える
2
using System;
public class MyBase
{
   int num;

   public MyBase(int i )
   {
      num = i;
      Console.WriteLine("in MyBase(int i)");
   }

   public int GetNum()
   {
      return num;
   }
}

public class MyDerived: MyBase
{

    // This constructor will call MyBase.MyBase(int i)
    ***//You are missing this.***
   public MyDerived(int i) : base(i)
   {
   }

}
于 2012-04-13T14:23:59.977 に答える
1

C#では、派生クラスのコンストラクター(SwimmingEventコンストラクターなど)を呼び出す前に、基本クラス(Eventクラス)のコンストラクターも呼び出す必要があります。基本クラスのコンストラクターの呼び出しの引数は、通常、次のように「base」キーワードを使用して指定されます。

class SwimmingEvent : Event
{
    ....
    public SwimmingEvent(String Distance, String InOrOut)
        :base(/*Arguments for base class constructor*/)
    {
        //Constructor of derived class
    }
}

「:base(...)」を省略すると、コンパイラは、「:base()」と記述した場合のように、基本クラスのパラメータなしのコンストラクタを呼び出すことを想定します。ただし、基本クラスにはパラメーターのないコンストラクターがないため、エラーが発生します。

Eventクラスでパラメーターなしのコンストラクターを作成するか、「base」キーワードを追加して、SwimmingEventの宣言で既存のEventクラスのコンストラクターを呼び出すための引数を指定する必要があります。

于 2012-04-13T14:46:08.457 に答える
1

すべての引数を親に戻す必要があります。

  class SwimmingEvent : Event
   {
    private String m_distance;
    private String m_inOutVar;

    public SwimmingEvent(String Distance, String InOrOut, string evName) : base (evName,"b","c", "d", "e")
    {
        m_distance = Distance;
        m_inOutVar = InOrOut;
    }
}
于 2012-04-13T14:23:18.620 に答える
1

このようなものかもしれません:

public class Event
{
    public Event() {} // public empty ctor 
    ....
    ....
}

と派生

public class SwimmingEvent  : Event
{
}

ctorこのようにして、空の引数リストがすでに基本クラスに存在するため、コンパイル時のエラーを回避できます(これが必要な場合) 。

これがあなたが探しているものではない場合は、明確にしてください。

于 2012-04-13T14:29:35.630 に答える