首先,我不知道这是不是叫做“复制”对象,所以题目可能是错的。我有一个名为File的自定义类,里面有一堆列表( 5-6个列表中的1000+编号)和一些其他属性。我的所有文件都在一个列表中,以便能够访问它们(LoadedFiles)。
我的问题是:如果我正在写一个方法,而我不想写:
DoSomeOperation(LoadedFiles[2]);
而是:
File file2 = new File();
file2 = LoadedFiles[2];
DoSomeOperation(file2);
这是一种糟糕的做法吗?或者编译器足够聪明,知道它是同一个对象,并直接从原始列表(LoadedFiles)访问它。
发布于 2013-07-17 14:47:56
实际上,您的类是一个引用类型,这意味着file2 = LoadedFiles2行将只复制一个指向创建的对象的引用指针,而不是将该对象的内容复制到一个新对象中。
因此,就性能而言,您需要创建一个文件的新实例:
File file2 = new File();
然后,您立即将引用切换到不同的对象
file2 = LoadedFiles[2];
从而释放对您刚刚创建的对象的引用。这将导致发生不必要的垃圾收集。如果文件file2 = LoadedFiles2在风格上对你有影响,那就更好了。
研究引用类型与值类型的最好地方是第77页上的C#语言规范http://www.microsoft.com/en-us/download/details.aspx?id=7029。
发布于 2013-07-17 14:49:31
在……里面
File file2 = new File();
file2 = LoadedFiles[2];
复制并不重要。只有一个引用被复制。但是创建了一个不必要的File()
实例。合并它:
File file2 = LoadedFiles[2];
发布于 2013-07-17 14:49:25
这绝对不是一个糟糕的做法。你不需要复制一个对象,你只需要在它上面保留一个引用(4字节的指针)。
这通常与编码风格有关。我个人不喜欢第一种方法,因为它使阅读变得复杂,而且我经常需要检查函数的返回值,所以
va file2 = LoadedFiles[2];
对我来说是个方便的选择。
也没有写作的意义
File file2 = new File();
file2 = LoadedFiles[2];
只需写下:
var file2 = LoadedFiles[2];
https://stackoverflow.com/questions/17692934
复制相似问题