好奇,当您从C#中的结构中返回关键字this时会发生什么?
例如:
public struct MyStruct
{
// ... some constructors and properties 1-3
public MyStruct Copy()
{
return MyStruct(Property1, Property2, Property3);
}
// vs
public MyStruct This()
{
return this;
}
}
答案 0 :(得分:16)
它返回值的独立副本。换句话说:
MyStruct x = new MyStruct();
y = x;
就像
MyStruct x = new MyStruct();
y = x.This();
真的很无趣。
请记住,“值”基本上是“构成与结构中的字段有关的所有内容”。如果这些字段是引用,则将复制引用值(不它们引用的对象)。如果它们是其他值类型,则只会复制这些值。
奇怪的事实:在结构中,你可以重新分配this
:
this = new MyStruct();
请不要那样做:)
答案 1 :(得分:1)
您将返回结构的按值复制。它与Copy例程基本相同,前提是Copy实际上复制了struct中的每个字段。
这是相当令人困惑的代码,所以我会避免它。如果您要返回“this”,人们会期望引用类型。
答案 2 :(得分:1)
我记得(我自己没有尝试过),数据网格中的DataGridComboBox单元格无法使用SelectedItem绑定到底层属性;你必须使用SelectedValue。因此,如果要将DataSource属性设置为对象集合并返回对所选对象的引用,则必须创建“This”属性并将其名称用作ValueMember属性。
答案 3 :(得分:0)
我永远不会在C#中使用单词This,(但它是大写的)作为函数名称,因为这与使用小写字母表示索引器属性相冲突...
如果你已经有一个包含这个结构实例的变量,为什么你要在那个有效克隆它的副本的变量上调用一个方法呢?你可以使用变量本身完成同样的事情......
即,
MyStruct x = new Mystruct();
MyStruct y = x.This();
仅仅是:
MyStruct x = new Mystruct();
MyStruct y = x;
答案 4 :(得分:0)
您将获得结构的副本。将MyStruct.This分配给另一个变量,然后更改它,看看原始变量,你会看到它没有改变。