无法访问受保护的成员’object.MemberwiseClone()’

我正在尝试在我的自定义类上使用.MemberwiseClone() ,但它会抛出此错误:

 Cannot access protected member 'object.MemberwiseClone()' via a qualifier of type 'BLBGameBase_V2.Enemy'; the qualifier must be of type 'BLBGameBase_V2.GameBase' (or derived from it) 

这是什么意思? 或者更好的是,我如何克隆Enemy类?

在任何类X ,您只能在X的实例上调用MemberwiseClone (或任何其他受保护的方法)。 (或者从X派生的类)

由于您尝试克隆的Enemy类没有inheritance您尝试克隆它的GameBase类,因此您收到此错误。

要解决此问题,请向Enemy添加一个公共Clone方法,如下所示:

 class Enemy : ICloneable { //... public Enemy Clone() { return (Enemy)this.MemberwiseClone(); } object ICloneable.Clone() { return Clone(); } } 
  • 你不能直接使用MemberwiseClone(),你必须通过派生类实现它(推荐)
  • 但是,通过反思,你可以欺骗它:)
  • 您可以将此litle扩展用于未实现ICloneable的类:

     ///  /// Clones a object via shallow copy ///  /// Object Type to Clone /// Object to Clone /// New Object reference public static T CloneObject(this T obj) where T : class { if (obj == null) return null; System.Reflection.MethodInfo inst = obj.GetType().GetMethod("MemberwiseClone", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); if (inst != null) return (T)inst.Invoke(obj, null); else return null; } 

这是一个允许克隆任何对象的扩展方法(请注意它在所有情况下都不起作用)

 public static class Extra_Objects_ExtensionMethods { public static T clone(this T objectToClone) { try { if (objectToClone.isNull()) "[object.clone] provided object was null (type = {0})".error(typeof(T)); else return (T)objectToClone.invoke("MemberwiseClone"); } catch(Exception ex) { "[object.clone]Faild to clone object {0} of type {1}".error(objectToClone.str(), typeof(T)); } return default(T); } }