首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中用于C++程序员的指针替代方案

C#中用于C++程序员的指针替代方案
EN

Stack Overflow用户
提问于 2012-01-20 16:50:32
回答 7查看 5.2K关注 0票数 3

我主要是一个C++程序员,几年没有碰过c#了(所以,如果我问的问题可能是我的大脑屁,请原谅我)。

背景信息:我正在编写一个文件组织实用程序(只是为了好玩,并帮助清理我的计算机上的副本)。我已经能够对文件和文件执行MD5校验和,并在不同的子目录中找到重复的文件,有时使用相同的文件名,有时不是(尽管总是相同的文件类型)。我最初是通过使用文件路径字符串和Winform、Arraylist、"MainFrom“后面代码中的数组作为概念的证明来做到这一点的。代码真的很难看,我已经对它感到困惑了,所以它肯定是不可维护的。

因此,我想,一个更优雅和明智的设计是将其存储为一个对象,其中包含文件路径、文件名、MD5、fileType等简单内容(是的,我知道文件)。然后我想,如果它引用了其他对象的实例,这些对象是“重复的”,“相似的”,这是有意义的。我希望创建一个指针数组,它是指向重复对象的对象的一部分。这样,在运行时,我可以遍历所有的副本,找出它们的属性等等。

我计划稍后从该类继承特定的文件类型,例如mp3或jpg文件,在这些文件中,我可以比较内容(例如:我可以识别哪些图片可以简单地调整彼此的大小,并让它们相互指向)。但是C#没有指针。我在看代表们,但话又说回来,这并不是我真正想要的。

我的困境: C#在托管代码中没有指针(除非绝对必要,否则我不想使用非托管部分)。

我还考虑过创建类似数组的东西,并在运行时传入“对象”。但这不是制造重复的吗?它实际上不是对新对象的引用,对吗?

对于我如何超越这一点,我真的很感激那些曾经做过C++ to C# transition的人的建议。如果我完全搞错了设计,请随时通知我。(我假设,由于它们都是面向对象的,这样的设计在两种情况下都是可行的)。

我非常感谢对其他资源的引用,因为我不是第一个试图在c++中编码的C#编码器。提前感谢!

EN

回答 7

Stack Overflow用户

发布于 2012-01-20 16:54:25

我的困境: C#在托管代码中没有指针

但是它在任何地方都对对象(包括数组)使用引用。

代码语言:javascript
复制
var a = new StringBuilder();
var b = a;      // a and b now refer to the same single StringBuilder instance
a.Append("!");  // equivalent to a->Append("!"); in C++

那么,您认为(只有)指针才能解决的实际上缺少了哪些功能呢?

创建类似数组的内容,并在运行时传入“对象”。但这不是制造重复的吗?它实际上不是对新对象的引用,对吗?

否,ArrayList只能存储对对象的引用,因此通常不需要复制或克隆。这只发生在值类型(int,double)上。但是一定要使用List<MyClass>,以获得更多的功能和更少的类型转换。

简而言之,在继续之前,先阅读一下引用类型、值类型和引用。

票数 8
EN

Stack Overflow用户

发布于 2012-01-20 16:54:23

C#中的引用类型(几乎)总是作为指针传递。如果我这样做了:

代码语言:javascript
复制
var a = new Object();
var list1 = new List<Object>();
var list2 = new List<Object>();
list1.Add(a);
list2.Add(a);

我不是在复制a,我只是在两个列表中都提到了它。希望这能有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2012-01-20 16:54:42

代码语言:javascript
复制
 A a1;
 A a2 = a1;

在C++中,上面的代码将使a1和a2成为彼此副本的两个单独的对象。在C#中,如果A被声明为类,则a1和a2将引用一个相同的对象,这样就不会为试图获取的对象本身提供指针。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8944918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档