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 Offline
    S Offline
    SPanicker
    wrote on last edited by
    #1

    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 M 2 Replies 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.

      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