Is it possible to access an object's private variables using an extension method?
No. You can do the same in an extension method as in a "normal" static method in some utility class.
So this extension method
public static void SomeMethod(this string s) { // do something with 's' }
is equivalent to some static helper method like this (at least regarding what you can access):
public static void SomeStringMethod(string s) { // do something with 's' }
(Of course you could use some reflection in either method to access private members. But I guess that's not the point of this question.)
No it cannot.
However, you will be interested to know that the other answers are incorrect in saying that normal static methods cannot access private fields. A static method can access private non-static member fields in its own class. The following code is perfectly valid and shows a static method accessing a private field:
public class Foo { private bool _field; public static bool GetField(Foo foo) { return foo._field; } }
Now... back to your question. You might think that an extension method should be able to do the same thing, given the (non-existent) "equivalence" to static methods that other answers claim exists. However, you cannot declare extension methods inside a nested class. So if you try to do the following:
public class Foo { private bool _field; public static class Extensions { public static bool GetField(this Foo foo) { return foo._field; } } }
You will get a compile error saying
Extension method must be defined in a top level static class; Extensions is a nested class
Note that, interestingly enough, removing the this
keyword causes the code to compile fine. The reasons for this are discussed here:
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