相关疑难解决方法(0)

访问`this`的字段初始化程序:在C#中无效,在Java中有效吗?

一,介绍:

这段代码:

class C
{
    int i = 5;
    byte[] s = new byte[i];
}
Run Code Online (Sandbox Code Playgroud)

无法编译时出现以下错误:

字段初始值设定项不能引用非静态字段,方法或属性"Ci"

Resharper说类似的东西:无法访问i静态上下文中的非静态字段.

这与C#规范所说的一致 - 字段初始化程序无法访问当前正在创建的实例(this),或者通过扩展,访问任何实例字段:

实例字段的变量初始值设定项无法引用正在创建的实例.因此,在变量初始化程序中引用它是一个编译时错误,因为变量初始化程序通过简单名称引用任何实例成员是编译时错误.

但是,这在Java中运行得很好:

class C {
    int i = 5;
    byte s[] = new byte[i]; //no errors here
}
Run Code Online (Sandbox Code Playgroud)

还在我这儿?好的,这是问题所在.呃,问题.

在一个假设的世界中,这在C#中是有效的,我想知道:它甚至可能吗?如果是这样,它会增加到表中的利弊是什么?此外,由于它的真正Java语言支持,做同样的优点/缺点持有 的Java?或者类型初始化程序在两种语言中的工作方式有根本区别吗?

c# java compiler-construction initialization

12
推荐指数
2
解决办法
797
查看次数

什么是基础构造函数调用的静态?

以下C#代码无法编译.

public class BaseType
{
    public BaseType(int bar)
    {
        // Do stuff with bar...
    }
}

public class DerivedType : BaseType
{
    private int foo;

    public DerivedType() : base(foo = 0) {}
}
Run Code Online (Sandbox Code Playgroud)

在调用DerivedType的基本构造函数时发生错误,并在静态上下文中显示消息"无法访问非静态字段'foo'." 这个错误消息告诉我什么?'foo'不是静态的,也不是类,而且这些不是静态构造函数.

c# compiler-errors

3
推荐指数
1
解决办法
635
查看次数