在C#中使用类似指针的结构

时间:2011-04-27 09:05:21

标签: c# .net pointers unsafe

我们正在将代码从C ++转移到C#,由于对C#的了解有限,我们陷入了陌生的境地。我们的问题是:

在c ++中,我们有2-3种类型的类/结构,它们具有指向属性的指针(std :: string),指针的目的是确保类似对象的所有实例都指向相同的属性。 e.g

struct st1{
   string strVal;
};
struct st2{
   string* strVal;
};
//At time of creation
st1* objst1 = new st1();
st2* objst2 = new st2();
objst2.strVal = &objst1.strVal;

//After this at all point both object will point to same value.

我想要这种架构C#,我得到了一些建议:

  1. 宣布活动
  2. 使代码不安全并使用指针(但我认为这会导致其他一些问题)
  3. 如果可以在这里完成更接近C ++的事情,请告诉我。

2 个答案:

答案 0 :(得分:3)

在C#中,所有clases都是引用/指针。因此,只要您的属性属于类类型,就可以在不同的结构中使用相同的实例。

但是当你使用字符串时会出现问题。虽然它是类和引用属性,但它被强制为可变。因此,当您更改它时,您不会更改实例本身,但您可以使用这些更改创建新副本。

我想到的一个解决方案是创建自定义字符串类,它只包含字符串并将其用作您的类型:

public class ReferenceString
{
    public String Value { get; set; }
}

答案 1 :(得分:0)

您可以使用带继承的静态属性:

class thing
{
  static string stringThing;
  public string StringThing
  {
    get { return stringThing; }
    set { stringThing = value; }
  }
}

class thing2 : thing
{
}

然后:

thing theThing = new thing();
theThing.StringThing = "hello";

thing2 theThing2 = new thing2();
// theThing2.StringThing is "hello"