SamuraiJack
SamuraiJack

Reputation: 5539

Alternate way to initialize class property which is of type class?

I have a CibilResponse Class that has properties that are of class type (TUEF class).

ICIBIL.cs

[ServiceContract]
public interface ICIBIL
{    
    [OperationContract]
    string InsertCibil(CibilResponse cibilResponse);    
    [OperationContract]
    string GenerateEnquiry(CibilEnquiry testObj);   
}

[DataContract]
public class CibilResponse
{
    [DataMember]
    public string ResponseString { get; set; }
    [DataMember]
    public string Business { get; set; }
    [DataMember]
    public string MkrId { get; set; }
}    

[DataContract]
public class CibilEnquiry
{
    [DataMember]
    public TUEF Tuef { get; set; }              
}    

[DataContract]
public class TUEF
{
    [DataMember]
    public string SegmentTag { get; set; }
    [DataMember]
    public string Version { get; set; }
    [DataMember]
    public string MemberReferenceNumber { get; set; }        
}

Application:

CibilWcfService.CIBIL obj = new CibilWcfService.CIBIL();
CibilWcfService.CibilEnquiry CibilEnquiryEnq = new CibilWcfService.CibilEnquiry();
CibilWcfService.TUEF objtuef = new CibilWcfService.TUEF();
objtuef.Version = "123";
CibilEnquiryEnq.Tuef = objtuef;
string res = obj.GenerateEnquiry(CibilEnquiryEnq);

As you can see I have to create a individual objects of various classes (object objtuef of class TUEF in this case) and then assign it to object CibilEnquiryEnq of CibilEnquiry class.

It can be very tedious if there are numerous members of type class in CibilResponse. What is the better way to initialize class members?

I was thinking of using constructor in CibilResponse Class and assigning values as CibilEnquiryEnq.Tuef.Version = "123"; but it didnt seem to work it gave me null reference error. I still had to create an object of TUEF in my application.

public CibilEnquiry()
{
    this.Tuef = new TUEF();
}

Application:

CibilWcfService.CIBIL obj = new CibilWcfService.CIBIL();
                CibilWcfService.CibilEnquiry CibilEnquiryEnq = new CibilWcfService.CibilEnquiry();
            CibilEnquiryEnq.Tuef.Version = "1111";//null reference error

            string res = obj.GenerateEnquiry(CibilEnquiryEnq);

WCF ICIBIL.cs

[ServiceContract]
public interface ICIBIL
{

    [OperationContract]
    string InsertCibil(CibilResponse cibilResponse);

    [OperationContract]
    string TestInsert(string testObj);

    [OperationContract]
    string GenerateEnquiry(CibilEnquiry testObj);

}

[DataContract]
public class CibilEnquiry
{
    [DataMember]
    public TUEF Tuef { get; set; }
    public CibilEnquiry()
    {
        this.Tuef = new TUEF();
        //this.Tuef = new TUEF() { SegmentTag = "", Version = ""};
    }

}


 [DataContract]
    public class TUEF
    {
        [DataMember]
        public string SegmentTag { get; set; }
        [DataMember]
        public string Version { get; set; }
        [DataMember]
        public string MemberReferenceNumber { get; set; }
   }

Upvotes: 0

Views: 65

Answers (1)

Shaharyar
Shaharyar

Reputation: 12439

The best way to initialize them in constructor, which you already suggested here.

Create a parametric constructor, and pass those parameters to your instance:

public CibilEnquiry(string segmentTag, string version, string memberReferenceNumber)
{
    this.Tuef = new TUEF()
    {
        SegmentTag = segmentTag, 
        Version = version, 
        MemberReferenceNumber = memberReferenceNumber
    };
    //initialize all of your class properties here
    //simply it is the purpose of constructor to properly initialize the instance
}

If you don't want to pass values through constructor, just initialize the instance in there and assign the values later:

public class CibilEnquiry
{
    public CibilEnquiry()
    {
        this.Tuef = new TUEF();
    }

    public TUEF Tuef { get; set; }
}

Instantiating the class:

CibilEnquiry enquiry = new CibilEnquiry();
enquiry.Tuef.Version = "123";

Upvotes: 2

Related Questions