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

它从传递参数的基类调用构造函数,context并且attrs

于 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 回答
2

调用基类的命名构造函数。如果未指定 base(argument),则调用无参数构造函数

c# 中“base”关键字的真正目的是什么?

基本关键字

于 2012-05-08T17:15:36.230 回答
1

您的类继承自基类,并且当您初始化 ScopeCanvas 类型的对象时,使用 (context, attrs) 的参数列表调用基构造函数

于 2012-05-08T17:16:27.640 回答
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 回答