8

誰かが以下の構文が何を意味するのか教えてもらえますか?

public ScopeCanvas(Context context, IAttributeSet attrs) : base(context, attrs)
{
}

私は何を意味しますかmethod(argument) : base(argument) {}

PSこれはクラスのコンストラクターです。

4

8 に答える 8

18

構文は、:base派生型が、指定された引数を受け入れる基本クラスのコンストラクターにチェーンする方法です。省略した場合、コンパイラは0個の引数を受け入れる基本クラスコンストラクタにサイレントにバインドしようとします。

class Parent {
  protected Parent(int id) { } 
}

class Child1 : Parent {
  internal Child1() { 
    // Doesn't compile.  Parent doesn't have a parameterless constructor and 
    // hence the implicit :base() won't work
  }
}

class Child2 : Parent {
  internal Child2() : base(42) { 
    // Works great
  }
}

:this指定された引数リストを持つ同じタイプのコンストラクターにチェーンできる構文もあります

于 2012-05-08T17:16:42.873 に答える
3

クラスは次のように定義されている可能性があります。

MyClass : BaseClass

他のクラスから派生しています。 : base(...)コンストラクターでは、派生クラスのコンストラクターでコードを実行する前に、基本クラスの適切なコンストラクターを呼び出します。

これが関連する質問です。

編集

Tilakが指摘しているように、 baseキーワードに関するMSDNドキュメントは適切な説明を提供します。

于 2012-05-08T17:15:15.787 に答える
2

基本クラスの名前付きコンストラクターを呼び出します。base(argument)が指定されていない場合、パラメーターなしのコンストラクターが呼び出されます

C#の「base」キーワードの目的は本当に何ですか?

基本キーワード

于 2012-05-08T17:15:36.230 に答える
2

基本クラスからコンストラクターを呼び出し、引数contextattrs

于 2012-05-08T17:15:51.360 に答える
2

これは抽象オーバーロードクラスコンストラクターであり、派生クラスと基本クラスの引数を初期化し、オーバーロードされたコンストラクターを使用するかどうかを指定できます。 リンク

public class A
{
    public A()
    { }
    public A(int size)
    { }
};

class B : public A
{
    public B() 
    {// this calls base class constructor A() 
    }
    public B(int size) : base(size)
    { // this calls the overloaded constructor A(size)
    }
}
于 2012-05-08T17:31:33.203 に答える
1

クラスは基本クラスから継承しており、ScopeCanvas型のオブジェクトを初期化すると、基本コンストラクターが(context、attrs)のパラメーターリストで呼び出されます。

于 2012-05-08T17:16:27.640 に答える
1

これは、このコンストラクターが2つの引数を取り、それらを継承オブジェクトコンストラクターに渡すことを意味します。以下の例では、引数が1つだけです。

Public class BaseType
{
    public BaseType(object something)
    {

    }
}

public class MyType : BaseType
{
     public MyType(object context) : base(context)
     {

     } 
}
于 2012-05-08T17:17:46.740 に答える
0

上記の例では、すべてが:baseについて話しているので、誰もbaseについて話していません はい、baseは親のメンバーにアクセスするために使用されますが、コンストラクターに制限されることはなく、base._parentVariableまたはbase._parentMethod()を直接使用できます。

ベース。例

于 2015-07-16T10:18:33.110 に答える