首先,对于可能令人困惑的标题感到抱歉,随时随地改变它,只要有人知道更合适的标题。C++到C#代码转换,参考与值类型的麻烦
我正在将一个数学库从C++移植到C#的过程中。移植实际的代码是在几天内完成的。然而,我一直在努力解决由于C#类是引用类型而C++类是值类型这一事实引发的所有错误。
让我解释一下:如果我在C++中有一个嵌套类Bar的Class Foo,并且如果我将Bar的现有实例分配给Foo,我基本上会复制它,如果C++编译器知道一种方法所以(如果我不使用指针,当然)
如果我在C#中做同样的工作,我分配一个引用。这导致难以置信的难以发现的副作用。如果在C#中,我的代码稍后在将其分配给Foo后修改了我的Bar实例,那么Foo.Bar对象当然也会被修改。不好。
所以我的问题是:有没有一种简单的方法,或最佳实践方法,当我假设我分配了一个副本时,在我的代码中查找指定引用的位置? 我甚至考虑每次在对象上调用getter时创建一个新对象,并在那里复制值。当然这意味着我再也不会对一个对象产生敬畏。再次,不好。
所以,基本上我问的是:如何找到每个出现的赋值运算符(=),其中TARGET是一个引用类型?这是我需要改变的那些代码行。
我试图通过简单地搜索'='字符来手动完成,但搜索成千上万行代码后,但我仍然错过了偶尔的分配目标。
尽量避免嵌套类,除非你熟悉使用它们..我个人认为它可以导致你一些问题JoelFan也有一个很棒的建议,但也知道对于非常大的类型我会使用类vs一个结构 – MethodMan 2014-09-12 15:55:52
在继续之前,请确保你知道C#非常好......我不能推荐这本书足够:http://www.amazon.com/C-Depth-3rd-Jon-Skeet/dp/161729134X/ref = sr_1_10?s = books&ie = UTF8&qid = 1410537373&sr = 1-10阅读本书的任何时间都会重新获得很多次 – JoelFan 2014-09-12 15:56:40
我非常感谢您的意见。但是,我知道的时间非常有限。 *这是移植库几乎1:1 *的原因。我只是要求提供一些提示/提示/ ...手头的工作 – lightxx 2014-09-12 16:00:37