I'm trying to use .MemberwiseClone()
on a custom class of mine, but it throws up this error:
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)
What does this mean? Or better yet, how can I clone an Enemy
class?
Within any class X
, you can only call MemberwiseClone
(or any other protected method) on an instance of X
. (Or a class derived from X
)
Since the Enemy
class that you're trying to clone doesn't inherit the GameBase
class that you're trying to clone it in, you're getting this error.
To fix this, add a public Clone
method to Enemy
, like this:
class Enemy : ICloneable { //... public Enemy Clone() { return (Enemy)this.MemberwiseClone(); } object ICloneable.Clone() { return Clone(); } }
you can use this litle extension for the classes that not implement ICloneable:
/// <summary> /// Clones a object via shallow copy /// </summary> /// <typeparam name="T">Object Type to Clone</typeparam> /// <param name="obj">Object to Clone</param> /// <returns>New Object reference</returns> public static T CloneObject<T>(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; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With