Class实例化C#
Class instantiation C#
我是 C# 初学者。
每次我在 class 中创建构造函数来实例化 class。
class OtherClass
{
void Main()
{
MyClass myClass = new MyClass();
}
}
class MyClass
{
public string text;
public int num;
public MyClass()
{
text = "something";
num = 12;
}
}
但是今天我看到了新的变体
class OtherClass
{
void Main()
{
MyClass myClass = new MyClass { num = 12, text = "something" };
}
}
class MyClass
{
public string text;
public int num;
}
有人能解释一下区别吗?
P.S对不起我的英语。
它被称为 Object Initializer。
这是标准的 C#
- 它创建 class 然后为属性赋值。
您应该阅读 C#
语言规范。
从技术上讲,这等同于:
var myClass = new MyClass ();
myCVlass.num = 12;
myClass.text = "something";
只是语法糖,即 VS 会在代码分析中自动向您推荐简化语法。
文档中的解释在这个link下。
第一个是具有一组硬编码值的构造函数。所以不是那么有用。您想让构造函数将值作为参数。其他很少有用的东西。
第二件事是对象初始化器。它的工作方式类似于数组初始值设定项,因为它只是工作的 shorthand/syntax 糖。 Initializer 只是对 public variables/setters.
的一堆正常赋值
有很多情况(只读字段、私有字段、私有设置器)只有构造函数可以写一些东西。 Object Initializer 无权访问它。真的只有shorthand.
第二个令人困惑的地方可能是隐式构造函数。如果您不提供构造函数,则会自动创建一个隐式的无参数构造函数。一旦你定义了任何构造函数,这个就会消失,因为在那种情况下你可能不再 想要 自动构造函数。有时有意没有无参数甚至 public 构造函数。你的情况
class MyClass
{
public string text;
public int num;
}
绝对有一个无参数构造函数MyClass()
。
我是 C# 初学者。
每次我在 class 中创建构造函数来实例化 class。
class OtherClass
{
void Main()
{
MyClass myClass = new MyClass();
}
}
class MyClass
{
public string text;
public int num;
public MyClass()
{
text = "something";
num = 12;
}
}
但是今天我看到了新的变体
class OtherClass
{
void Main()
{
MyClass myClass = new MyClass { num = 12, text = "something" };
}
}
class MyClass
{
public string text;
public int num;
}
有人能解释一下区别吗?
P.S对不起我的英语。
它被称为 Object Initializer。
这是标准的 C#
- 它创建 class 然后为属性赋值。
您应该阅读 C#
语言规范。
从技术上讲,这等同于:
var myClass = new MyClass ();
myCVlass.num = 12;
myClass.text = "something";
只是语法糖,即 VS 会在代码分析中自动向您推荐简化语法。
文档中的解释在这个link下。
第一个是具有一组硬编码值的构造函数。所以不是那么有用。您想让构造函数将值作为参数。其他很少有用的东西。
第二件事是对象初始化器。它的工作方式类似于数组初始值设定项,因为它只是工作的 shorthand/syntax 糖。 Initializer 只是对 public variables/setters.
的一堆正常赋值有很多情况(只读字段、私有字段、私有设置器)只有构造函数可以写一些东西。 Object Initializer 无权访问它。真的只有shorthand.
第二个令人困惑的地方可能是隐式构造函数。如果您不提供构造函数,则会自动创建一个隐式的无参数构造函数。一旦你定义了任何构造函数,这个就会消失,因为在那种情况下你可能不再 想要 自动构造函数。有时有意没有无参数甚至 public 构造函数。你的情况
class MyClass
{
public string text;
public int num;
}
绝对有一个无参数构造函数MyClass()
。