誰かが以下の構文が何を意味するのか教えてもらえますか?
public ScopeCanvas(Context context, IAttributeSet attrs) : base(context, attrs)
{
}
私は何を意味しますかmethod(argument) : base(argument) {}
?
PSこれはクラスのコンストラクターです。
構文は、: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
指定された引数リストを持つ同じタイプのコンストラクターにチェーンできる構文もあります
クラスは次のように定義されている可能性があります。
MyClass : BaseClass
他のクラスから派生しています。 : base(...)
コンストラクターでは、派生クラスのコンストラクターでコードを実行する前に、基本クラスの適切なコンストラクターを呼び出します。
これが関連する質問です。
編集
Tilakが指摘しているように、 baseキーワードに関するMSDNドキュメントは適切な説明を提供します。
基本クラスの名前付きコンストラクターを呼び出します。base(argument)が指定されていない場合、パラメーターなしのコンストラクターが呼び出されます
基本クラスからコンストラクターを呼び出し、引数context
とattrs
これは抽象オーバーロードクラスコンストラクターであり、派生クラスと基本クラスの引数を初期化し、オーバーロードされたコンストラクターを使用するかどうかを指定できます。 リンク
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)
}
}
クラスは基本クラスから継承しており、ScopeCanvas型のオブジェクトを初期化すると、基本コンストラクターが(context、attrs)のパラメーターリストで呼び出されます。
これは、このコンストラクターが2つの引数を取り、それらを継承オブジェクトコンストラクターに渡すことを意味します。以下の例では、引数が1つだけです。
Public class BaseType
{
public BaseType(object something)
{
}
}
public class MyType : BaseType
{
public MyType(object context) : base(context)
{
}
}
上記の例では、すべてが:baseについて話しているので、誰もbaseについて話していません。 はい、baseは親のメンバーにアクセスするために使用されますが、コンストラクターに制限されることはなく、base._parentVariableまたはbase._parentMethod()を直接使用できます。