No. An instance method requires an instance to be called.
An instance method is mainly important for two reasons:
- Having access to the members of the instance (
this)
- Optionally, being a
virtual (or interface) method, thus allowing implementations to conform to a given interface while providing their own concrete implementation
Without the instance, both of these are impossible. If you need neither, make your method static.
EDIT:
As Jon Skeet noted, it's possible to do this. I did vaguely remember there was some such weird case, but couldn't reproduce it myself, so I thought it simply doesn't work anymore for some reason, whatever. Turns out I just made a silly mistake in my sample :)
But note that even with this, the "reasons to use an instance method" above still hold - it doesn't allow you to do anything a static method wouldn't. In fact, extension methods are exactly "static methods pretending to be instance methods" for example. They just explicitly declare the this argument.
Unlike extension methods, I'd argue that this approach isn't "really C#". You're accessing the method as if it weren't a C# method. I don't consider this fundamentally different from using C# to write IL to call a method with a null "instance":
ldnull
call instance void NS.A::MyMethod()
(translated to ILGenerator.Emit, of course)
Or, for that matter, using C# to write a few bytes into memory, moving them to an executable page and executing.
The really important part is understanding that .NET and IL don't care about this. It doesn't exist in IL, it's a C# concept (also used in other languages, of course) and C# purposefully limits your capabilities of using this in a method for certain benefits. But other languages might do away with such a thing entirely, or use a different convention than "the first argument of an instance method is a reference to the object instance". There's plenty of other similar examples - e.g. IL doesn't differentiate between out and ref arguments.
This is very important when interoperating with non-C# code, or when dealing with potentially hostile code you're executing - do not assume that all C# limitations hold on .NET as a whole.