Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Why do I listen to my sleep coding self?

Why do I listen to my sleep coding self?

Scheduled Pinned Locked Moved The Lounge
csharpdesignquestion
41 Posts 20 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Lost User

    BobJanova wrote:

    There's actually no reason why you can't have vtable entries for static methods

    Ok fair enough, obviously you can put anything in there, including random bytes, but that then brings us to:

    BobJanova wrote:

    You just have to choose a different way of determining the type that should get dispatched, instead of using the instance's dynamic type,

    I don't really see any options there, but that might be because I don't understand exactly what you mean by this:

    BobJanova wrote:

    the declaration type of the method which was originally called.

    B Offline
    B Offline
    BobJanova
    wrote on last edited by
    #19

    Ok so let's have an example.

    public static class BaseService {
    public static void LoadData() {
    Console.WriteLine(GetDataSource());
    }

    protected virtual static string GetDataSource();
    }

    public static class FileService : BaseService {
    protected override static string GetDataSource() { return "file.dat"; }
    }

    public static class DatabaseService : BaseService {
    protected override static string GetDataSource() { return "database"; }
    }

    ... and calling code

    void Run() {
    DatabaseService.LoadData();
    FileService.LoadData();
    }

    This would print "database" and "file.dat", because the class used for the vtable lookups would be taken from the data type used for the call (i.e. DatabaseService.LoadData). That would be resolved at compile time and based on the static declaration type used in the call, not dynamic object type lookups as with instance dispatch. A related good idea is the ability to pass service classes around and dispatch off them:

    void Run(Class<BaseService> service) {
    service.LoadData();
    }

    ... called like Run(DatabaseService) which would bake in the type for dispatch.

    L 1 Reply Last reply
    0
    • B BobJanova

      Ok so let's have an example.

      public static class BaseService {
      public static void LoadData() {
      Console.WriteLine(GetDataSource());
      }

      protected virtual static string GetDataSource();
      }

      public static class FileService : BaseService {
      protected override static string GetDataSource() { return "file.dat"; }
      }

      public static class DatabaseService : BaseService {
      protected override static string GetDataSource() { return "database"; }
      }

      ... and calling code

      void Run() {
      DatabaseService.LoadData();
      FileService.LoadData();
      }

      This would print "database" and "file.dat", because the class used for the vtable lookups would be taken from the data type used for the call (i.e. DatabaseService.LoadData). That would be resolved at compile time and based on the static declaration type used in the call, not dynamic object type lookups as with instance dispatch. A related good idea is the ability to pass service classes around and dispatch off them:

      void Run(Class<BaseService> service) {
      service.LoadData();
      }

      ... called like Run(DatabaseService) which would bake in the type for dispatch.

      L Offline
      L Offline
      Lost User
      wrote on last edited by
      #20

      Ok, I see what you mean.

      1 Reply Last reply
      0
      • OriginalGriffO OriginalGriff

        :laugh: I work for myself, so I give myself special permission to "goof off". :laugh:

        Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952) Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)

        A Offline
        A Offline
        AnnPandora
        wrote on last edited by
        #21

        Lucky you! Allowed to give yourself some special permissions :laugh:

        OriginalGriffO 1 Reply Last reply
        0
        • A AnnPandora

          Lucky you! Allowed to give yourself some special permissions :laugh:

          OriginalGriffO Offline
          OriginalGriffO Offline
          OriginalGriff
          wrote on last edited by
          #22

          The down side is the Christmas party is a little lonely... ;)

          Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952) Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)

          "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
          "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

          A 1 Reply Last reply
          0
          • OriginalGriffO OriginalGriff

            The down side is the Christmas party is a little lonely... ;)

            Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952) Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)

            A Offline
            A Offline
            AnnPandora
            wrote on last edited by
            #23

            Started working here the week after they had their Christmas party so I can't give you any feedback on that one, yet! :-D

            1 Reply Last reply
            0
            • L Lost User

              0 times. I've wished that interfaces could contain static methods so that T.someFunction could exist for generics (constrained to that interface), but that's a completely separate issue. (that can't work in C# of course) How is "static virtual" even a reasonable concept? No instance = no vptr = no dynamic dispatch.

              P Offline
              P Offline
              PIEBALDconsult
              wrote on last edited by
              #24

              harold aptroot wrote:

              no vptr

              Don't get hung up on how current languages are implemented. I too would like a language that allows static members in interfaces and abstracts. If a Bright compiler developer wanted to make this happen, I'm sure he could, it would likely have to be very different from current implementations. (It's way beyond my skills of course.)

              You'll never get very far if all you do is follow instructions.

              J 1 Reply Last reply
              0
              • OriginalGriffO OriginalGriff

                In bed last night, I dreamt a wonderful improvement to the design of some software I'm working on. It would clean it up, move the code into it's appropriate classes, make it all beautiful. So I have just coded it. Or at least, I coded 3/4 of it. That was the point when I thought "Hang on a moment, you can't have abstract static methods in C#". :doh: Bugger. Note to self: don't listen to me when I'm sleepy. Anyone else done this? Constructed a massive edifice of beautiful code in your mind, only to find when you have got sufficient caffeine in your system that it has a fatal, fundamental, flaw?

                Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952) Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)

                C Offline
                C Offline
                Chris Maunder
                wrote on last edited by
                #25

                OriginalGriff wrote:

                abstract static

                OriginalGriff wrote:

                Anyone else done this?

                Yes, for exactly the same thing. Was such a perfect solution to the problem. Except that it wasn't. Obviously. I even still have the code in place, safely commented out, just to remind me.

                cheers Chris Maunder

                1 Reply Last reply
                0
                • OriginalGriffO OriginalGriff

                  In bed last night, I dreamt a wonderful improvement to the design of some software I'm working on. It would clean it up, move the code into it's appropriate classes, make it all beautiful. So I have just coded it. Or at least, I coded 3/4 of it. That was the point when I thought "Hang on a moment, you can't have abstract static methods in C#". :doh: Bugger. Note to self: don't listen to me when I'm sleepy. Anyone else done this? Constructed a massive edifice of beautiful code in your mind, only to find when you have got sufficient caffeine in your system that it has a fatal, fundamental, flaw?

                  Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952) Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)

                  P Offline
                  P Offline
                  Paulo Zemek
                  wrote on last edited by
                  #26

                  Make it more dynamic. Instead of static abstract, make it a static property of a delegate type.

                  1 Reply Last reply
                  0
                  • L Lost User

                    OriginalGriff wrote:

                    you can't have abstract static methods in C# this universe

                    P Offline
                    P Offline
                    Paulo Zemek
                    wrote on last edited by
                    #27

                    Delphi allowed virtual static methods... so I think it probably allowed abstract static methods too.

                    1 Reply Last reply
                    0
                    • OriginalGriffO OriginalGriff

                      In bed last night, I dreamt a wonderful improvement to the design of some software I'm working on. It would clean it up, move the code into it's appropriate classes, make it all beautiful. So I have just coded it. Or at least, I coded 3/4 of it. That was the point when I thought "Hang on a moment, you can't have abstract static methods in C#". :doh: Bugger. Note to self: don't listen to me when I'm sleepy. Anyone else done this? Constructed a massive edifice of beautiful code in your mind, only to find when you have got sufficient caffeine in your system that it has a fatal, fundamental, flaw?

                      Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952) Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)

                      H Offline
                      H Offline
                      HardikPatel SE
                      wrote on last edited by
                      #28

                      I also made that mistake once.... :laugh: :laugh: :laugh:

                      Hardik Patel

                      1 Reply Last reply
                      0
                      • Kornfeld Eliyahu PeterK Kornfeld Eliyahu Peter

                        If you started to dream of coding you have only two options - doctor or vacation...

                        I'm not questioning your powers of observation; I'm merely remarking upon the paradox of asking a masked man who he is. (V)

                        K Offline
                        K Offline
                        kalberts
                        wrote on last edited by
                        #29

                        Check your passport photo: The 1st law of passport photos: The more you look like your passport photo, the more you need vacation

                        1 Reply Last reply
                        0
                        • P PIEBALDconsult

                          harold aptroot wrote:

                          no vptr

                          Don't get hung up on how current languages are implemented. I too would like a language that allows static members in interfaces and abstracts. If a Bright compiler developer wanted to make this happen, I'm sure he could, it would likely have to be very different from current implementations. (It's way beyond my skills of course.)

                          You'll never get very far if all you do is follow instructions.

                          J Offline
                          J Offline
                          JimmyRopes
                          wrote on last edited by
                          #30

                          very different from current implementations[^] :-D

                          **_Once you lose your pride the rest is easy.

                          I would agree with you but then we both would be wrong._**
                          The report of my death was an exaggeration - Mark Twain Simply Elegant Designs JimmyRopes Designs
                          I'm on-line therefore I am. JimmyRopes

                          P P 2 Replies Last reply
                          0
                          • L Lost User

                            0 times. I've wished that interfaces could contain static methods so that T.someFunction could exist for generics (constrained to that interface), but that's a completely separate issue. (that can't work in C# of course) How is "static virtual" even a reasonable concept? No instance = no vptr = no dynamic dispatch.

                            S Offline
                            S Offline
                            SortaCore
                            wrote on last edited by
                            #31

                            I once coded a class function in C++ that calls realloc() or malloc(), based on whether "this" points to null. It then deletes this and returns This.

                            L 1 Reply Last reply
                            0
                            • S SortaCore

                              I once coded a class function in C++ that calls realloc() or malloc(), based on whether "this" points to null. It then deletes this and returns This.

                              L Offline
                              L Offline
                              Lost User
                              wrote on last edited by
                              #32

                              That's.. kind of dirty

                              S 1 Reply Last reply
                              0
                              • L Lost User

                                That's.. kind of dirty

                                S Offline
                                S Offline
                                SortaCore
                                wrote on last edited by
                                #33

                                Not only that, it calls _msize() on the this pointer and checks against another size parameter for the realloc. The last member in the class was a 0-byte array, for which the _msize() of the pointer minus size of other class members gave the array size.

                                1 Reply Last reply
                                0
                                • OriginalGriffO OriginalGriff

                                  In bed last night, I dreamt a wonderful improvement to the design of some software I'm working on. It would clean it up, move the code into it's appropriate classes, make it all beautiful. So I have just coded it. Or at least, I coded 3/4 of it. That was the point when I thought "Hang on a moment, you can't have abstract static methods in C#". :doh: Bugger. Note to self: don't listen to me when I'm sleepy. Anyone else done this? Constructed a massive edifice of beautiful code in your mind, only to find when you have got sufficient caffeine in your system that it has a fatal, fundamental, flaw?

                                  Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952) Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)

                                  J Offline
                                  J Offline
                                  john morrison leon
                                  wrote on last edited by
                                  #34

                                  If you are going tp code in your sleep then choose a language that will better match your fantasies.

                                  F 1 Reply Last reply
                                  0
                                  • J JimmyRopes

                                    very different from current implementations[^] :-D

                                    **_Once you lose your pride the rest is easy.

                                    I would agree with you but then we both would be wrong._**
                                    The report of my death was an exaggeration - Mark Twain Simply Elegant Designs JimmyRopes Designs
                                    I'm on-line therefore I am. JimmyRopes

                                    P Offline
                                    P Offline
                                    PIEBALDconsult
                                    wrote on last edited by
                                    #35

                                    Oh my, I've been Osmosian-rolled. :sigh:

                                    You'll never get very far if all you do is follow instructions.

                                    1 Reply Last reply
                                    0
                                    • J JimmyRopes

                                      very different from current implementations[^] :-D

                                      **_Once you lose your pride the rest is easy.

                                      I would agree with you but then we both would be wrong._**
                                      The report of my death was an exaggeration - Mark Twain Simply Elegant Designs JimmyRopes Designs
                                      I'm on-line therefore I am. JimmyRopes

                                      P Offline
                                      P Offline
                                      Paulo Zemek
                                      wrote on last edited by
                                      #36

                                      My anti-virus considered it as a trojan horse.

                                      1 Reply Last reply
                                      0
                                      • B BobJanova

                                        It's actually a reasonable concept if you allow static inheritance (i.e. static virtual in C# speak), and that's a really useful concept that is missing in C#. How many times have you had to create an instanced service class, even though it has no state (so should be static), because you can't have static members in an interface or virtual static members in a base class?

                                        P Offline
                                        P Offline
                                        patbob
                                        wrote on last edited by
                                        #37

                                        BobJanova wrote:

                                        static inheritance (i.e. static virtual in C# speak), and that's a really useful concept that is missing in C#

                                        Couldn't you use a singleton of some related class hierarchy that implements the "static" code?

                                        We can program with only 1's, but if all you've got are zeros, you've got nothing.

                                        B 1 Reply Last reply
                                        0
                                        • J john morrison leon

                                          If you are going tp code in your sleep then choose a language that will better match your fantasies.

                                          F Offline
                                          F Offline
                                          Frank Malcolm
                                          wrote on last edited by
                                          #38

                                          As Gilbert & Sullivan put it (in Iolanthe), When you’re lying awake With a dismal headache, And repose is taboo’d by anxiety, I conceive you may use Any language you choose To indulge in, without impropriety;

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups