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

ube*_*uru 5 c# c++ transition

我主要是一名C++程序员,并且在几年内没有触及过c#(所以,如果我问的问题可能是我的脑屁),请原谅我.

背景信息: 我正在编写一个文件组织实用程序(只是为了好玩,并帮助清理我的计算机上的重复项).我已经能够为文件和文件执行MD5校验和,并在各个子目录中查找重复文件,有时使用相同的文件名,有时不使用(但总是使用相同的文件类型).我最初是通过在"MainFrom"的代码中使用文件路径字符串和Winform对象,Arraylist,Arrays作为概念证明来完成的.代码真的很难看,我已经很困惑地看着它,所以它绝对不可维护.

所以我认为一个更优雅和明智的设计将存储为一个对象,它将有简单的东西,如文件路径,文件名,MD5,文件类型等等(是的,我知道FILE).然后我想它是否有意义,如果它引用了"重复","相似"的其他对象实例.我正在寻找创建一个指针数组,它是指向重复对象的对象的一部分.这样,在运行时我可以通过所有重复,找出他们的属性等.

我计划稍后从这个类继承特定的文件类型,如mp3或jpg文件,我可以比较内容(例如:我可以确定哪些图片可能只是彼此重新调整大小的版本,并让它们指向对方).但是C#没有指针.我在看代表,但话又说回来,那不是我想要的.

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

我还想过创建类似arraylist的东西,并在运行时传入"对象".但这不会造成重复吗?它不是真正引用新对象的吗?

我非常感谢那些已经将C++转换C#过渡的人的建议.如果我在这里完全接近设计错误,请随时告诉我.(我假设因为它们都是面向对象的,所以这样的设计可以在两个世界中起作用).

我非常感谢对其他可以提供帮助的资源的引用(因为我不是第一个尝试用C#编写代码的c ++编码器).提前致谢!

Hen*_*man 7

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

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

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++
Run Code Online (Sandbox Code Playgroud)

那么你认为(只)指针可以解决的实际缺失的功能是什么?

创建类似arraylist的东西并在运行时传入"对象".但这不会造成重复吗?它不是真正引用新对象的吗?

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

简而言之,在继续之前,请阅读参考类型,值类型和参考.