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. Other Discussions
  3. The Weird and The Wonderful
  4. got another codebase to work on... its full of surprises!!!

got another codebase to work on... its full of surprises!!!

Scheduled Pinned Locked Moved The Weird and The Wonderful
question
18 Posts 6 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.
  • B Bernhard Hiller

    That guy used to be a C/C++ programmer. He wants to make sure that he copies the value, instead of referencing the original value. Just think of those terrible char *. C--!

    A Offline
    A Offline
    Ankush Bansal
    wrote on last edited by
    #6

    What if I tell you he is an experienced C# developer:cool:

    1 Reply Last reply
    0
    • A Ankush Bansal

      public class Field
      {

      private readonly string _field;
      private readonly string _table;

      Field()
      {}

      public Field(Field s)
      {
      _table = string.Copy(s.Table);
      _field = string.Copy(s.Field);
      }

      }

      string.Copy for what?:mad:

      S Offline
      S Offline
      Sentenryu
      wrote on last edited by
      #7

      Only I noted the private default constructor that make this class impossible to instantiate? or there are more constructors?

      I'm brazilian and english (well, human languages in general) aren't my best skill, so, sorry by my english. (if you want we can speak in C# or VB.Net =p)

      R 1 Reply Last reply
      0
      • S Sentenryu

        Only I noted the private default constructor that make this class impossible to instantiate? or there are more constructors?

        I'm brazilian and english (well, human languages in general) aren't my best skill, so, sorry by my english. (if you want we can speak in C# or VB.Net =p)

        R Offline
        R Offline
        RobCroll
        wrote on last edited by
        #8

        FYI The default accessor is internal not private.

        "You get that on the big jobs."

        S 1 Reply Last reply
        0
        • A Ankush Bansal

          public class Field
          {

          private readonly string _field;
          private readonly string _table;

          Field()
          {}

          public Field(Field s)
          {
          _table = string.Copy(s.Table);
          _field = string.Copy(s.Field);
          }

          }

          string.Copy for what?:mad:

          R Offline
          R Offline
          RobCroll
          wrote on last edited by
          #9

          This has got me a little interested. By not making a copy, could that stop the GC from disposing of Field s until this instance is also ready for collection?

          "You get that on the big jobs."

          OriginalGriffO 1 Reply Last reply
          0
          • R RobCroll

            This has got me a little interested. By not making a copy, could that stop the GC from disposing of Field s until this instance is also ready for collection?

            "You get that on the big jobs."

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

            No - because it creates a binary copy of the string content rather than the reference: I have no idea why MS though copying an immutable object would be a necessary thing to do, but there you go1... Copying the reference could stop the GC, provided the reference didn't get dereferenced itself. 1Thinking about it, it could be handy in two cases: if there is ever a ReferenceEquals on the strings, then the copy will be different, and if the string is passed to unmanaged code which messes it up - the later being very, very nasty though. I would hand a StringBuilder instead just for safety.

            Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water

            "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

            S 1 Reply Last reply
            0
            • R RobCroll

              FYI The default accessor is internal not private.

              "You get that on the big jobs."

              S Offline
              S Offline
              Sentenryu
              wrote on last edited by
              #11

              Verify again, it's private, i just tested to make sure. ALL members of a class are private for default, there is no exception to constructors, i just tested like this: My class:

              public class Form
              {
                  Form() {
              
                  }
               }
              

              i used a project that i was working on, so this is a MVC 3 project, my controller:

              public class SurveyController : Controller
              {
                  public SurveyController() {
                  
                      Form form = new Form();
                  }
              
              }
              

              this yields this compiler error:

              Error 1 'FormularioAvaliacaoSaude.Models.Formulario.Formulario()' is inaccessible due to its protection level C:\workspace\FormularioAvaliacaoSaude\FormularioAvaliacaoSaude\Controllers\PesquisaController.cs 22 31 FormularioAvaliacaoSaude

              (sorry for don't translating the paths on the error message, but i fell like i'll screw it up if i do it...) by this error i make the conclusion that the default Access Modifier. ... Just run into this on MSDN:

              MSDN wrote:

              The declaration of the empty constructor prevents the automatic generation of a default constructor. Note that if you don't use an access modifier with the constructor it will still be private by default. However, the private modifier is usually used explicitly to make it clear that the class cannot be instantiated.

              I'm brazilian and english (well, human languages in general) aren't my best skill, so, sorry by my english. (if you want we can speak in C# or VB.Net =p)

              R 1 Reply Last reply
              0
              • OriginalGriffO OriginalGriff

                No - because it creates a binary copy of the string content rather than the reference: I have no idea why MS though copying an immutable object would be a necessary thing to do, but there you go1... Copying the reference could stop the GC, provided the reference didn't get dereferenced itself. 1Thinking about it, it could be handy in two cases: if there is ever a ReferenceEquals on the strings, then the copy will be different, and if the string is passed to unmanaged code which messes it up - the later being very, very nasty though. I would hand a StringBuilder instead just for safety.

                Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water

                S Offline
                S Offline
                Sentenryu
                wrote on last edited by
                #12

                Maybe this creates another internalized copy for the string, if that is util or not, i can't say...

                I'm brazilian and english (well, human languages in general) aren't my best skill, so, sorry by my english. (if you want we can speak in C# or VB.Net =p)

                OriginalGriffO 1 Reply Last reply
                0
                • S Sentenryu

                  Maybe this creates another internalized copy for the string, if that is util or not, i can't say...

                  I'm brazilian and english (well, human languages in general) aren't my best skill, so, sorry by my english. (if you want we can speak in C# or VB.Net =p)

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

                  String.Copy does create a new internal copy of the string data (rather than copy the reference as a normal string assignment would). That is precisely why the original code is so bad! It creates unnecessary copies of the string data for no obvious reason where an assignment would be faster, better for memory use, and easier to read... :laugh:

                  Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water

                  "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

                  S 1 Reply Last reply
                  0
                  • OriginalGriffO OriginalGriff

                    String.Copy does create a new internal copy of the string data (rather than copy the reference as a normal string assignment would). That is precisely why the original code is so bad! It creates unnecessary copies of the string data for no obvious reason where an assignment would be faster, better for memory use, and easier to read... :laugh:

                    Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water

                    S Offline
                    S Offline
                    Sentenryu
                    wrote on last edited by
                    #14

                    So the String.Copy() must be used if one wants to pass a string to a P/Invoke call? i don't get why this would be better than passing a StringBuilder... well, i've got to far ;P

                    I'm brazilian and english (well, human languages in general) aren't my best skill, so, sorry by my english. (if you want we can speak in C# or VB.Net =p)

                    OriginalGriffO 1 Reply Last reply
                    0
                    • S Sentenryu

                      So the String.Copy() must be used if one wants to pass a string to a P/Invoke call? i don't get why this would be better than passing a StringBuilder... well, i've got to far ;P

                      I'm brazilian and english (well, human languages in general) aren't my best skill, so, sorry by my english. (if you want we can speak in C# or VB.Net =p)

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

                      Gawd no! Use a StringBuilder instead! Passing an immutable object to a function known to change it is very nasty indeed (as I said earlier).

                      Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water

                      "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

                      S 1 Reply Last reply
                      0
                      • OriginalGriffO OriginalGriff

                        Gawd no! Use a StringBuilder instead! Passing an immutable object to a function known to change it is very nasty indeed (as I said earlier).

                        Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water

                        S Offline
                        S Offline
                        Sentenryu
                        wrote on last edited by
                        #16

                        I understand... well, there are some things that are better to do not know for what are used...

                        I'm brazilian and english (well, human languages in general) aren't my best skill, so, sorry by my english. (if you want we can speak in C# or VB.Net =p)

                        1 Reply Last reply
                        0
                        • S Sentenryu

                          Verify again, it's private, i just tested to make sure. ALL members of a class are private for default, there is no exception to constructors, i just tested like this: My class:

                          public class Form
                          {
                              Form() {
                          
                              }
                           }
                          

                          i used a project that i was working on, so this is a MVC 3 project, my controller:

                          public class SurveyController : Controller
                          {
                              public SurveyController() {
                              
                                  Form form = new Form();
                              }
                          
                          }
                          

                          this yields this compiler error:

                          Error 1 'FormularioAvaliacaoSaude.Models.Formulario.Formulario()' is inaccessible due to its protection level C:\workspace\FormularioAvaliacaoSaude\FormularioAvaliacaoSaude\Controllers\PesquisaController.cs 22 31 FormularioAvaliacaoSaude

                          (sorry for don't translating the paths on the error message, but i fell like i'll screw it up if i do it...) by this error i make the conclusion that the default Access Modifier. ... Just run into this on MSDN:

                          MSDN wrote:

                          The declaration of the empty constructor prevents the automatic generation of a default constructor. Note that if you don't use an access modifier with the constructor it will still be private by default. However, the private modifier is usually used explicitly to make it clear that the class cannot be instantiated.

                          I'm brazilian and english (well, human languages in general) aren't my best skill, so, sorry by my english. (if you want we can speak in C# or VB.Net =p)

                          R Offline
                          R Offline
                          RobCroll
                          wrote on last edited by
                          #17

                          Sorry my bad. I thought it was internal. You are right

                          "You get that on the big jobs."

                          B 1 Reply Last reply
                          0
                          • R RobCroll

                            Sorry my bad. I thought it was internal. You are right

                            "You get that on the big jobs."

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

                            In Java it is package-visible (pretty close to internal) ... and bizarrely, there is no explicit way to specify this access level!

                            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