从C#中的结构返回“this”会发生什么?

时间:2009-09-03 21:16:29

标签: c# .net struct

好奇,当您从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;
  }
}

5 个答案:

答案 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分配给另一个变量,然后更改它,看看原始变量,你会看到它没有改变。