什么是对“;结构不能具有形式为:base(参数列表)的初始值设定项&”;
本文关键字:参数 列表 base 结构 不能 什么 | 更新日期: 2023-09-27 17:58:30
基于http://msdn.microsoft.com/en-us/library/aa288208%28v=vs.71%29.aspx
结构构造函数类似于类构造函数,除了以下不同:
-
结构不能包含显式无参数构造函数。Struct成员是自动的初始化为其默认值。
-
结构不能有初始值设定项形式为:base(参数列表)。
我理解第2项有问题。有人能给我举个具体的例子吗?
基本上,结构不支持继承。尽管在技术上它们确实继承自基类对象,但第2项指出,您不能显式调用基类构造函数。更多信息请点击此处:http://msdn.microsoft.com/en-us/library/aa288471%28v=vs.71%29.aspx
struct
(隐式)立即从System.ValueType
派生,并且该abstract
类上唯一的构造函数是protected
且无参数。这些是语言规范中的事实,您所质疑的陈述是这些事实的结果,并在§11.3.8:中的语言规范中明确说明
struct
实例构造函数不允许包含形式为base(...)
的构造函数初始值设定项。
对于从具有可访问的非参数构造函数的类派生的引用类型,可以执行以下操作:
class Base {
private readonly string baseName;
public string BaseName { get { return this.baseName; } }
public Base(string baseName) { this.baseName = baseName; }
}
class Derived : Base {
private readonly string derivedName;
public string DerivedName { get { return this.derivedName; } }
public Derived(string baseName, string derivedName) : base(baseName) {
this.derivedName = derivedName;
}
}
关键是Derived
是Base
,因此,需要调用Base
的构造函数来完全初始化Derived
的新实例(即,需要初始化使其成为Base
的Derived
的部分)。通过语法base(...)
调用基构造函数可以调用适当的构造函数。
您所质疑的关于struct
的声明指出,不允许进行这样的调用。这主要是因为根据这个答案第一句中陈述的事实,永远不可能有这样的构造函数。
下面是一个初始化器的示例,其形式为:base(参数列表)。
public class Foo
{
public Foo(int i) { Debug.WriteLine(i); }
}
public class Bar: Foo
{
public Bar() : base(4) {} // Prints '4' to debug via the base class's constructor.
}
结构不支持继承,因此不允许显式调用基类的构造函数。