Sent via BlackBerry from Cingular Wireless -----Original Message----- From: "Pardee, Roy" <[EMAIL PROTECTED]> Date: Fri, 25 May 2007 14:21:37 To:ADVANCED-DOTNET@DISCUSS.DEVELOP.COM Subject: Re: [ADVANCED-DOTNET] Classes as objects
Ah--yes! This scratches an itch for me--thanks! So in ruby, static methods are functionally equivalent to instance methods defined on the Class itself (that is, the class' Class). For extra credit, explain whether and how having classes as objects enables ruby's "open class" functionality--that is, the ability to modify a class' definition at runtime. ;-) Thanks! -Roy -----Original Message----- From: Discussion of advanced .NET topics. [mailto:[EMAIL PROTECTED] On Behalf Of Brad Wilson Sent: Friday, May 25, 2007 1:47 PM To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM Subject: [ADVANCED-DOTNET] Classes as objects On 5/25/07, Christopher Frazier <[EMAIL PROTECTED]> wrote: > > Another short answer: classes aren't objects in .NET. > > *Everything* is an object in .NET. That's not true. In .NET, a class is not an object. You can do typeof(), but what you get back is a metadata structure which is not the class itself. For example, if you want to call the static method "Foo" on the class "Bar", in .NET, you have two choices: 1. Foo.Bar() 2. typeof(Foo).GetMethod("Bar", ...).Invoke() What if you wanted to treat "Foo" in a way that you only cared about having "a class which has the static method Bar() on it" without knowing the class? In .NET, you only choice is reflection (#2), and I think we can all admit that's not a very OO route. In a language where classes are objects, like Ruby (the one I know best), I can pass around the instance of the class object. So let's say I write a method like this: def MyMethod(obj) obj.Bar() end Now I can call MyMethod with the "Foo" class which has a static method called Bar on it: MyMethod(Foo) Yes, that works. In fact, it doesn't really matter whether the method is static, right? There's nothing in MyMethod that gives any indication about Staticness. What if Bar() is an instance method on the class Baz? class Baz def Bar() ... end end Now I could pass an instance of Baz to MyMethod as well: myBaz = Baz.new MyMethod(myBaz) That is what is meant when it's said that ".NET classes aren't objects". You can't do this in .NET without using reflection, and even if you use reflection, you have to differentiate between whether what you have is an object (instance method, passing around a this point) or a static method. -- http://www.agileprogrammer.com/dotnetguy/ http://www.flickr.com/photos/dotnetguy/ (\__/) (='.'=) This is Bunny. Copy and paste bunny into your (")_(") signature to help him gain world domination. =================================== This list is hosted by DevelopMentor http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com =================================== This list is hosted by DevelopMentorĀ® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com