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. General Programming
  3. C#
  4. Constructor of Structs.

Constructor of Structs.

Scheduled Pinned Locked Moved C#
question
16 Posts 4 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.
  • S SPanicker

    Hi, Can somebody tell me what are all the limitations of the constructor of a struct? Is it possible to declare an ordinary writeline statement in its constructor?

    Regards, Lenus.

    E Offline
    E Offline
    Ennis Ray Lynch Jr
    wrote on last edited by
    #2

    I am sure it is in the documentation of a struct what the limitations of a struct are.

    Need a C# Consultant? I'm available.
    Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway

    S 1 Reply Last reply
    0
    • E Ennis Ray Lynch Jr

      I am sure it is in the documentation of a struct what the limitations of a struct are.

      Need a C# Consultant? I'm available.
      Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway

      S Offline
      S Offline
      SPanicker
      wrote on last edited by
      #3

      ok. Thnx. What abt the second question? Is it possible? I tried but it isn't working. I felt quite strange at this.

      Regards, Lenus.

      E 1 Reply Last reply
      0
      • S SPanicker

        ok. Thnx. What abt the second question? Is it possible? I tried but it isn't working. I felt quite strange at this.

        Regards, Lenus.

        E Offline
        E Offline
        Ennis Ray Lynch Jr
        wrote on last edited by
        #4

        To declare actually means to define which would mean object WriteLine; is a valid answer. I think the professor means, can you call System.Diagnostics.WriteLine; experimentation will yield the answer just make sure you are building in debug mode with a console application first.

        Need a C# Consultant? I'm available.
        Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway

        S 1 Reply Last reply
        0
        • E Ennis Ray Lynch Jr

          To declare actually means to define which would mean object WriteLine; is a valid answer. I think the professor means, can you call System.Diagnostics.WriteLine; experimentation will yield the answer just make sure you are building in debug mode with a console application first.

          Need a C# Consultant? I'm available.
          Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway

          S Offline
          S Offline
          SPanicker
          wrote on last edited by
          #5

          No I just want to print out something from the struct's constructor which is not happening. Why is it so?

          Regards, Lenus.

          P 1 Reply Last reply
          0
          • S SPanicker

            Hi, Can somebody tell me what are all the limitations of the constructor of a struct? Is it possible to declare an ordinary writeline statement in its constructor?

            Regards, Lenus.

            M Offline
            M Offline
            mmikey7
            wrote on last edited by
            #6

            Limitation is that structs cannot contain explicit parameterless constructors. But you certainly can use Console.WriteLine in sturct's constructor. See this example: using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Test t = new Test(7); Console.ReadLine(); } } public struct Test { public Test(int x) { Console.WriteLine("I'm Test's constructor and this is my x parameter: "+ x.ToString()); } } }

            S 1 Reply Last reply
            0
            • M mmikey7

              Limitation is that structs cannot contain explicit parameterless constructors. But you certainly can use Console.WriteLine in sturct's constructor. See this example: using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Test t = new Test(7); Console.ReadLine(); } } public struct Test { public Test(int x) { Console.WriteLine("I'm Test's constructor and this is my x parameter: "+ x.ToString()); } } }

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

              Yes it is possible only if the struct is instantiated (as if it was an object). Not in the other case when we declare it without the new operator(as if it was a value type variable). Any suggestions?

              Regards, Lenus.

              S M 2 Replies Last reply
              0
              • S SPanicker

                Yes it is possible only if the struct is instantiated (as if it was an object). Not in the other case when we declare it without the new operator(as if it was a value type variable). Any suggestions?

                Regards, Lenus.

                S Offline
                S Offline
                SPanicker
                wrote on last edited by
                #8

                It seems as if the constructors don't perform any other work than to assign fields withe values when created as a value type(without new operator).

                Regards, Lenus.

                1 Reply Last reply
                0
                • S SPanicker

                  Yes it is possible only if the struct is instantiated (as if it was an object). Not in the other case when we declare it without the new operator(as if it was a value type variable). Any suggestions?

                  Regards, Lenus.

                  M Offline
                  M Offline
                  mmikey7
                  wrote on last edited by
                  #9

                  SPanicker* wrote:

                  Not in the other case when we declare it without the new operator(as if it was a value type variable).

                  Now I know what you were asking, it was not clear from your initial post. In that case, default parameterless constructor is called and as I said before you cannot declare or override paremeterless constructor.

                  S 1 Reply Last reply
                  0
                  • S SPanicker

                    No I just want to print out something from the struct's constructor which is not happening. Why is it so?

                    Regards, Lenus.

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

                    Go forth and try it.

                    S 1 Reply Last reply
                    0
                    • M mmikey7

                      SPanicker* wrote:

                      Not in the other case when we declare it without the new operator(as if it was a value type variable).

                      Now I know what you were asking, it was not clear from your initial post. In that case, default parameterless constructor is called and as I said before you cannot declare or override paremeterless constructor.

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

                      Even in this case, the constructor(which i provide) is getting read and the values are assigned. Only exception is that,I cannot call any other functions from inside that( But values can be assigned to variables ). I still need two points to be cleared: As you said if the parameterless constructor cannot be overridden then how is this happening? If the parameterless constructor cannot be overriden, then why is C# designed to accept such constructors which are of no use? Thanks.

                      Regards, Lenus.

                      M 1 Reply Last reply
                      0
                      • P PIEBALDconsult

                        Go forth and try it.

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

                        I tried. Its not possible from the constructor I create for a value type (declared without new keyword) struct.

                        Regards, Lenus.

                        1 Reply Last reply
                        0
                        • S SPanicker

                          Even in this case, the constructor(which i provide) is getting read and the values are assigned. Only exception is that,I cannot call any other functions from inside that( But values can be assigned to variables ). I still need two points to be cleared: As you said if the parameterless constructor cannot be overridden then how is this happening? If the parameterless constructor cannot be overriden, then why is C# designed to accept such constructors which are of no use? Thanks.

                          Regards, Lenus.

                          M Offline
                          M Offline
                          mmikey7
                          wrote on last edited by
                          #13

                          You declare(override) parameterless constructor? I'm lost here, can you past piece of code with your struct?

                          S 1 Reply Last reply
                          0
                          • M mmikey7

                            You declare(override) parameterless constructor? I'm lost here, can you past piece of code with your struct?

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

                            Hi Michal, Sorry what i meant was, I have a constructor for a (value type - declared without new keyword) struct. This constructor cannot invoke any inbuilt functions like Console.WriteLine or user defined ones. But at the same time it can do assign values for fields. This seems quite strange. But, the same things works well(from inside the constructor)if it is declared with the new keyword. Pls. chk this sample code and tell me if somethngs wrong: using System; struct newStruct { //case 1: With struct new operator public newStruct(int a) { Console.WriteLine("In newStruct"); Console.WriteLine("{0}",a); } } struct anotherStruct { //case : Without new operator - like a value type variable. public int x; public anotherStruct(int a) { Console.WriteLine("In newStruct"); x = a; Console.WriteLine("{0},{1}",a,x); } public void method1() { Console.WriteLine(x); } } class AppEntry { public static void Main() { newStruct abc = new newStruct(10); anotherStruct def; def.x= 250; def.method1(); } }

                            Regards, Lenus.

                            M 1 Reply Last reply
                            0
                            • S SPanicker

                              Hi Michal, Sorry what i meant was, I have a constructor for a (value type - declared without new keyword) struct. This constructor cannot invoke any inbuilt functions like Console.WriteLine or user defined ones. But at the same time it can do assign values for fields. This seems quite strange. But, the same things works well(from inside the constructor)if it is declared with the new keyword. Pls. chk this sample code and tell me if somethngs wrong: using System; struct newStruct { //case 1: With struct new operator public newStruct(int a) { Console.WriteLine("In newStruct"); Console.WriteLine("{0}",a); } } struct anotherStruct { //case : Without new operator - like a value type variable. public int x; public anotherStruct(int a) { Console.WriteLine("In newStruct"); x = a; Console.WriteLine("{0},{1}",a,x); } public void method1() { Console.WriteLine(x); } } class AppEntry { public static void Main() { newStruct abc = new newStruct(10); anotherStruct def; def.x= 250; def.method1(); } }

                              Regards, Lenus.

                              M Offline
                              M Offline
                              mmikey7
                              wrote on last edited by
                              #15

                              Hi Lenus, there is nothing wrong with your code. In struct newStruct you defined constructor with parameter that is called when you create instance of newStruct: newStruct abc = new newStruct(10); In struct anotherStruct you also defined constructor with parameter, but this constructor is never called. anotherStruct def; //here you create object def of type anotherStruct. no costructor is called def.x = 250; // here you just assign value 250 to variable x, no constructor is called def.method1(); //this writes 250 to output which is totally correct since you set x to 250 before Compiler won't compile code if you do not set def.x. I was probably wrong when I said there is default parameterless constructor. There is no default parameterless constructor at all and you can not declare your own.

                              S 1 Reply Last reply
                              0
                              • M mmikey7

                                Hi Lenus, there is nothing wrong with your code. In struct newStruct you defined constructor with parameter that is called when you create instance of newStruct: newStruct abc = new newStruct(10); In struct anotherStruct you also defined constructor with parameter, but this constructor is never called. anotherStruct def; //here you create object def of type anotherStruct. no costructor is called def.x = 250; // here you just assign value 250 to variable x, no constructor is called def.method1(); //this writes 250 to output which is totally correct since you set x to 250 before Compiler won't compile code if you do not set def.x. I was probably wrong when I said there is default parameterless constructor. There is no default parameterless constructor at all and you can not declare your own.

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

                                Ok. Thanks for the clarification. But I think this proves there is nothing wrong declaring a value type stuct with a constructor - which obviously of no use and does nothing.

                                Regards, Lenus.

                                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