I found this in System.Object
[SecuritySafeCritical]
protected object MemberwiseClone();
Why isn’t this virtual? Wouldnt this break if i put myclass into object then call MemberwiseClone? wouldnt it called object.MemberwiseClone() in that case which has no idea about my implementation of MemberwiseClone? (I guess it can cheat with reflection but virtual would do exactly what it needs). I dont understand why is this not virtual? Also note Equals, ToString, etc are (public) virtual.
MemberwiseClone is implemented directly by the CLR, so it knows exactly what type your object is and how to make a memberwise clone. There’s only one way to do it, so there’s no reason to let you “customize” the behavior with some specialized logic, like Equals, ToString, etc. Another way to think about it: if you could override it, what would you do differently than the base implementation that wouldn’t break the contract of the API?