- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道为什么 MemberwiseClone 被定义为 protected 。这意味着只有派生类型可以访问它。如果它被定义为公共(public),有什么问题?
最佳答案
Pavel Minaev's answer from another discussion:
其他人已经解释过 MemberwiseClone,但没有人解释为什么它受到保护。我会试着给出理由。
这里的问题是 MemberwiseClone 只是盲目地复制状态。在许多情况下,这是不可取的。例如,对象可能有一个私有(private)字段,它是对列表的引用。浅拷贝,例如 MemberwiseClone 所做的,会导致新对象指向同一个列表——而且编写类可能并不期望与其他任何人共享该列表。
或者一个对象可以有某种 ID 字段,在构造函数中生成 - 同样,当你克隆它时,你会得到两个具有相同 ID 的对象,这可能会导致假设 ID 是唯一的方法中的各种奇怪的失败。
或者说你有一个对象可以打开一个套接字或一个文件流,并存储一个对它的引用。 MemberwiseClone 只会复制引用 - 您可以想象两个对象试图交叉调用同一流的结果不会很好。
简而言之,“克隆”不是针对任意对象的定义明确的操作。在 C++ 中默认为所有类提供 memberwise operator= 的事实更令人讨厌,因为人们经常忘记它的存在,并且不要为复制没有意义或危险的类禁用它(并且有很多这样的类(class))。
关于.net - 为什么在 System.Object 中定义的 MemberwiseClone protected ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3272363/
这里有很多关于 MemberwiseClone 的问题,但我找不到任何内容。 据我了解,MemberwiseClone 基本上只是复制一个对象的内存区域,将其转储到其他地方并将其称为该对象的新实例。显
这里有很多关于 MemberwiseClone 的问题,但我找不到任何内容。 据我了解,MemberwiseClone 基本上只是复制一个对象的内存区域,将其转储到其他地方并将其称为该对象的新实例。显
我得到了: internal sealed class A : ICloneable { public Collection CollectionB { get; set; } pub
我需要定义一个执行浅拷贝的 Clone() 方法。 (不需要深拷贝) 但我也需要它来复制派生类的成员。 如果我有 class Base { int baseMember; publ
我想创建一个更受限制的 MemberwiseClone 版本,但意识到我自己的 C# 代码可以将属性添加到对象的唯一方法是使用 dynamic,但是不能赋予对象与原始对象相同的类型。我的另一个更丑陋的
我对如何使用 MemberwiseClone() 方法感到困惑。我查看了 MSDN 中的示例,他们通过 this 关键字使用它。 为什么我不能像GetType() 或ToString() 那样直接调用
我对下面这段代码感到困惑, Developer devCopy = (Developer)dev.Clone(); Developer 类的 Clone 方法只是创建一个 Employee 克隆,然后
我有 ApiContext 对象(没有代码),想为它制作扩展方法 代码有什么问题?它说: cannot use this in static member ApiContext 驻留在单例模式中 pu
是否可以在没有 EntityKey 的情况下 MemberwiseClone 从 ObjectContext 检索到的对象?我在 C# 中使用 Entity Framework 4.1 如果我尝试更改
我正在大量自定义对象上实现 ICloneable。一些对象具有 DateTime 类型,这是一个结构值。我知道可以使用 newDateTime = oldDateTime 复制此值,但是如果我在我的对
如果我有这样的代码 class Student { public string RollID { get; set; } } class Person { public Student
我试图在我正在处理的 C# 应用程序中实现撤消/重做堆栈,方法是在调用撤消时将对象恢复到之前的状态。我有一个基本上像这样的“ Action ”类: class Action { object
首先让我说我知道它是一个 protected 方法,我不应该调用它,但它不应该工作,因为 MemberwiseClone 是在 Object 类和 String 继承自它? 所以这是克隆方法(我删除了
我正在将 C# 代码转换为 Java。有很多不同的地方依赖.Net MemberwiseClone在我正在转换的代码中。 好像都是浅拷贝。那么是否可以简单地用 Java 的 clone() 替换这些调
我想知道为什么 MemberwiseClone 被定义为 protected 。这意味着只有派生类型可以访问它。如果它被定义为公共(public),有什么问题? 最佳答案 Pavel Minaev's
我试图在我的自定义类上使用 .MemberwiseClone(),但它抛出了这个错误: Cannot access protected member 'object.MemberwiseClone()
真的很抱歉再次提出这样一个菜鸟问题,但我真的很难理解我在网上找到的答案,我只需要确定...... 我正在将一些 Javascript 转换为 C#,JS 中的其中一件事就是该行 this.shared
我是一名优秀的程序员,十分优秀!