似乎C#3.0对象初始化程序语法允许在存在无参数构造函数时排除构造函数中的打开/关闭括号对.例:
var x = new XTypeName { PropA = value, PropB = value };
Run Code Online (Sandbox Code Playgroud)
相反:
var x = new XTypeName() { PropA = value, PropB = value };
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么构造函数打开/关闭括号对后面是可选的XTypeName?
假设我有一个Album班级:
public class Album
{
public string Name {get; set;}
public string Artist {get; set;}
public int Year {get; set;}
public Album()
{ }
public Album(string name, string artist, int year)
{
this.Name = name;
this.Artist = artist;
this.Year = year;
}
}
Run Code Online (Sandbox Code Playgroud)
当我想将数据分配给类型的对象时Album,接下来的两种方法之间有什么区别:
通过构造函数
var albumData = new Album("Albumius", "Artistus", 2013);
Run Code Online (Sandbox Code Playgroud)
或实例化时
var albumData = new Album
{
Name = "Albumius",
Artist = "Artistus",
Year = 2013
};
Run Code Online (Sandbox Code Playgroud) 使用C#对象初始化器有什么好处吗?
在C++中没有引用,并且所有内容都封装在对象中,因此在创建对象后使用它们而不是初始化成员是有意义的.
它们在C#中使用的情况如何?
我正在编写一个小示例来练习创建类的新实例。
我有以下代码:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class MainClass
{
static void Main()
{
var p = new Person
{
Name = "Harry",
Age = 20
};
Console.WriteLine($"Name: {p.Name}. Age: {p.Age}");
p = new Person()
{
Name = "Hermonie",
Age = 18
};
Console.WriteLine($"Name: {p.Name}. Age: {p.Age}");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
它正在工作。
我的问题:有什么区别
var p = new Person {};
Run Code Online (Sandbox Code Playgroud)
和
var p = new Person() {};
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个版本?
可能重复:
对象初始值设定项和构造函数之间有什么区别?
在c#中,您可以构造一个对象,如:
public class MyObject{
int val1;
int val2;
public MyObject(int val1, val2){
this.val1 = val1;
this.val2 = val2;
}
}
Run Code Online (Sandbox Code Playgroud)
附:
MyObject ob = new MyObject(1,2);
Run Code Online (Sandbox Code Playgroud)
或者:
MyObject ob = new MyObject(){ val1 = 1, val2 = 2 };
Run Code Online (Sandbox Code Playgroud)
这种构造函数之间有什么不同?
我刚刚学习了对象初始化器,并想知道什么时候使用它们的最佳实践.
这是我读到的关于它们的内容:http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx 它清楚地表明它们是创建匿名类型所必需的,但我想知道我是否应该在所有其他情况下,尝试将它们更喜欢正常的构造函数.
当我Console.Write在对象初始化程序中使用时,我收到此错误
错误CS0747初始化程序成员声明符无效
person[i] = new Karmand()
{
Console.Write("first name:"),
FirstName = Console.ReadLine(),
LastName = Console.ReadLine(),
ID = Convert.ToInt32(Console.ReadLine()),
Hoghoogh = Convert.ToDouble(Console.ReadLine())
};
Run Code Online (Sandbox Code Playgroud) C#将允许使用Object()或Object {}创建对象.与Object()和Object {}有什么区别
public item getitem()
{
return new item()
}
public item getitem()
{
return new item {}
}
Run Code Online (Sandbox Code Playgroud) 我有一些DataGridView我转换为实体对象的行.在转换过程中,我重置了一些值.由于"基本"数据来自DataBoundItem当前DataGridViewRow,因此使用对象初始化器不是我正在寻找的选项,我不想分配来自DataBoundItem再次(冗余)的第一个对象的每个值.
所以我的问题是:是否可以一次分配多个对象属性,如果,你是如何实现它的?
我发现了以下问题,但没有一个能解决我的问题:
foreach (DataGridViewRow CurrRow in DataGridView.Rows)
{
SomeObject SomeObj = (SomeObject) CurrRow.DataBoundItem;
SomeObj.PropertyA = 0;
SomeObj.PropertyB = 0;
SomeObjCollection.Add(SomeObj);
}
Run Code Online (Sandbox Code Playgroud)
单独使用逗号分配属性(在昏迷时给出语法错误):
TimeEntries.Hours, TimeEntries.Expenses = 0;
Run Code Online (Sandbox Code Playgroud) 我有以下课程:
public class TestClass {
public string ClassName {
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
做的有什么区别:
var instance = new TestClass();
Run Code Online (Sandbox Code Playgroud)
并做
var instance = new TestClass { };
Run Code Online (Sandbox Code Playgroud)
我认为你需要包含()来调用对象的构造函数.那是什么意思?
编辑:有人可以解释哪个最好?或者,如果忽略构造函数,优点或缺点?
编辑2:对不起,如果我问过已经回答的问题.差异对我来说有点清楚,但我真的不明白我如何混合和匹配()和{},因为有时候()被忽略了,我想知道我什么时候能这样做
我对 C# 还很陌生,希望在这里得到一些帮助。mypath在本例中,该变量是一个占位符。该类包含在using Programm.src;
这是我的代码,我想input_excel_path在mainWindow1对象中初始化变量。
编译器中的结果
错误 CS0747:无效的初始化程序成员声明符和编译器错误 CS0165:使用未分配的局部变量“名称”。
MainWindow mainWindow1 = new MainWindow()
{
mainWindow1.m_input_excel_path = mypath;
};
Run Code Online (Sandbox Code Playgroud)
这是我的课:
class MainWindow
{
public string m_input_excel_path = String.Empty;
public MainWindow(string input_excel_path )
{
m_input_excel_path = input_excel_path;
}
}
Run Code Online (Sandbox Code Playgroud) c# ×11
.net ×4
constructor ×4
oop ×3
object ×2
class ×1
initializer ×1
properties ×1
syntax ×1
types ×1