Solved

C# Get Set Properties - Concatenate string

Posted on 2010-09-20
6
560 Views
Last Modified: 2012-05-10
Hi!

I am very new to C# and OOP and are facing a problem which I was hoping could be resolved by using properties.

I wanted to build classes for all my API commands, so that I could quickly fill in the xml nodes, optional and mandatory ones without writing the xml every time.

Example:
    public class MyClass
    {
        public string DeviceID { get { return DeviceID; } set { DeviceID = "<DEVICEID>" + value + "</DEVICEID>"; } }
        public string CommandID { get { return CommandID; } set { CommandID = "<COMMANDID>" + value + "</COMMANDID>"; } }
        public string CreationDateTime{ get { return CreationDateTime; } set { CreationDateTime= "<CREATIONDATETIME>" + value + "</CREATIONDATETIME>"; } }
}

Open in new window


From this I could quickly build a parameter string for the webservice.

The project compiles, but when i run it, my memory goes up to 1,5 GB and then it crashes without any exceptions.

Are there any other ways that you guys could help me with? Alternative help me with the syntax here.

The webservice expects the call to be in the following format:
<PARAMETERS>
<MANDATORY>....</MANDATORY>
<OPTIONAL1>...</OPTIONAL1>
...........
<OPTIONAL9>...</OPTIONAL9>
</PARAMETERS>

Open in new window


Thank you,
/Mikael
0
Comment
Question by:amr-it
6 Comments
 
LVL 16

Expert Comment

by:Vikram Singh Saini
ID: 33716376
The project  compiles, but when i run it, my memory goes up to 1,5 GB and then it  crashes without any exceptions.

(1) This line made me to think that the problem is of some memory leak in your program.

(2) Make sure that you are closing all resources, file handles and all types of connections in your program. There seems to some instance or open resource that is consuming your memory too much.

(3) If program have some sort of infinite loop then also program can go out of memory and hence can crash.

Cross check all points. There is no issue in properties.

Regards,
VSS
0
 
LVL 74

Accepted Solution

by:
käµfm³d   👽 earned 65 total points
ID: 33716439
This line:

    public string CommandID { get { return CommandID; } set { CommandID = "<COMMANDID>" + value + "</COMMANDID>"; } }

Is an infinite loop because you are assigning a value to the property within the property itself. You cannot put logic inside of automatic properties. Automatic properties are properties ones where you allow the runtime to generate internal members for you. For example,

   public string MyVariable { get; set;}

is an automatic property because the runtime will create a hidden member to store the value MyVariable points to.

For your purpose, declare a private member and have your property point to it. Here is an example
private string _commandID;

public string CommandID { get { return this._commdandID; } set { this._commandID = "<COMMANDID>" + value + "</COMMANDID>"; } }

Open in new window

0
 
LVL 33

Assisted Solution

by:Todd Gerbert
Todd Gerbert earned 60 total points
ID: 33716453
Your get and set's are circular...that is, your public string DeviceID { get { return DeviceID; } creates an endless loop - when I use MyClass.DeviceID, the get block is executed which calls DeviceID again, which executes the get block, which calls DeviceID again, which executes the get block, and so on.
I think you want your properties to look something like this...

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace ConsoleApplication1

{

	class MyClass

	{

		private string _deviceId;

		private string _commandId;

		private string _creationDateTime;



		public string DeviceID

		{

			set

			{

				// Assign the "plain" device ID to _deviceId string var

				_deviceId = value;

			}



			get

			{

				// Return the "plain" device ID plus XML

				return String.Format("<DEVICEID>{0}</DEVICEID>", _deviceId);

			}

		}



		public string CommandID

		{

			set { _commandId = value; }

			get { return String.Format("<COMMANDID>{0}</COMMANDID>", _commandId); }

		}



		public string CreationDateTime

		{

			set { _creationDateTime = value; }

			get { return String.Format("<CREATIONDATETIME>{0}</CREATIONDATETIME>", _creationDateTime); }

		}

	}

}

Open in new window

0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 16

Expert Comment

by:Vikram Singh Saini
ID: 33716511
Hi,

I didn't paid right attention to your properties code. kaufmed & tgerbert points are correct.

You are declaring your property in wrong ways. Rectify the mistake. However I pointed out for some infinite loop there. And this property declaration was the infinite loop.

Happy Programming!

Regards,
VSS
0
 
LVL 1

Author Comment

by:amr-it
ID: 33718377
Thank you for your comments! If there are other "nice" ways to solve this, I would appreciate suggestions of other ways of doing it.

Again, thank you.
0
 
LVL 1

Author Comment

by:amr-it
ID: 33741519
Just to add, after this I found out that XmlSerializer could do my classes.



 

using System;



public class clsPerson

{

  public  string FirstName;

  public  string MI;

  public  string LastName;

}



class class1

{ 

   static void Main(string[] args)

   {

      clsPerson p=new clsPerson();

      p.FirstName = "Jeff";

      p.MI = "A";

      p.LastName = "Price";

      XmlSerializer x = new XmlSerializer(p.GetType());

      x.Serialize(Console.Out, p);

      Console.WriteLine();

      Console.ReadLine();

   }

}    



//Output



<?xml version="1.0" encoding="IBM437"?>

 <clsPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3

 .org/2001/XMLSchema">

<FirstName>Jeff</FirstName>

 <MI>A</MI>

<LastName>Price</LastName>

</clsPerson>

Open in new window

0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Parse CSS value with RegEx 2 41
Handling arrays 14 33
Get String split 5 33
How to LOAD up a .NET Framework website with data? 2 12
Introduction Although it is an old technology, serial ports are still being used by many hardware manufacturers. If you develop applications in C#, Microsoft .NET framework has SerialPort class to communicate with the serial ports.  I needed to…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now