“base”语法是什么意思?

9

有人能告诉我以下语法的含义吗?

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

我指的是 method(argument) : base(argument){} 是什么??
附注:这是一个类的构造函数。

2
那是一个构造函数,不是一个方法。 - Gabe
2
我认为,如果一个问题在两分钟内有超过5个答案,那么这个问题就不应该被提出。@Sean87,你可以轻松地通过谷歌搜索“C# base关键字”。 - SimpleVar
3
谷歌会给你更快的答案,比如 C# base 这个问题,比 StackOverflow 还要快。(@Yorye Nathan - 我完全同意。) - zmilojko
3
我知道这已经很老了,但我谷歌搜索了“C# :base keyword”,就来到了这里...当然,MSDN链接是第一个,但SO答案通常更为简洁。 - ledgeJumper
8个回答

19
< p > :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语法,它允许在同一类型的构造函数之间使用指定的参数列表进行链式调用


如果省略,则编译器将静默尝试绑定到一个接受0个参数的基类构造函数。这是解释中最关键的部分 - 谢谢。 - Sabuncu

3

你的类可能是这样定义的:

MyClass : BaseClass

它源自另一个类。在您的构造函数中调用 : base(...) 会在运行派生类构造函数中的代码之前调用基类中适当的构造函数。
这里有一个相关问题Here编辑 正如 Tilak 所指出的,MSDN 关于 base 关键字的文档提供了很好的解释。

2

2
它调用基类的构造函数,将参数 contextattrs 传递进去。

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)
    }
}

1
你的类继承自一个基类,当你初始化一个ScopeCanvas类型的对象时,基础构造函数会被调用,并传入参数列表(context, attrs)。

1
这意味着这个构造函数需要两个参数,并将它们传递给继承对象的构造函数。下面是一个只有一个参数的示例。
Public class BaseType
{
    public BaseType(object something)
    {

    }
}

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

     } 
}

0
在上面的例子中,所有人都在谈论:base,没有人谈论base.。是的,base用于访问父级成员,但不仅限于构造函数,我们可以直接使用base._parentVariable或base._parentMethod()。

base. example


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接