English 中文(简体)
Is is possible to override a hidden method?
原标题:

Say I have the following hierarchy:

public class MyClass
{
  protected virtual void Method() { ... }
}

public class MySubClass : MyClass
{
  public new virtual void Method() { ... }
}

public class MySubSubClass : MySubClass
{
  // how do I reference the protected Method() to override it?
}

Is it possible to override the implementation of the protected Method() so that invocations from other methods defined in MyClass are dispatched to an implementation in MySubSubClass?

If not possible, it d be nice to be enlightened as to why.

最佳回答

If you re attempting to override the version of Method defined in MyClass then the answer is you cannot. The definition in MySubClass hides this implementation from you and it s not possible for you to further override it.

问题回答

if you mark your hidden method as also being virtual you can override the hidden method:

public new virtual void Method()

Yes. You can use "new" keyword to reintroduce any method you want. From that point on, every call to the the "newed" method will be addressed to the new implementation.

In this case, any call to Method() originated from MyClass will use the MySubSubClass implementation as long as the object in question is of type MySubSubClass

As @Jared said, you cannot. I can only assume that you re trying to avoid using new again because you want proper virtual handling. The only way you re going to manage this is by getting rid of the public new version of Method() and naming it something else. new completely hides any version of the method you re redeclaring that may exist in ancestor objects.





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签