2016-06-11 4 views
0

저는 C#과 프로그래밍의 새로운 영역입니다. 나는이 개념들 중 많은 것들에 대해 저의 머리를 감싸기 위해 책과 YouTube 비디오에서 몇 가지 연습을 해왔습니다.객체 클래스의 속성 인 생성자에 매개 변수 전달

현재이 문제에 봉착했습니다. 나는 위탁 상점을위한 작은 응용 프로그램을 가지고 있으며 하드 코딩 된 샘플 데이터를 제거하고 프로그램이 텍스트 파일에서 데이터를 읽도록 노력하고있었습니다. 다음에 항목을 추가,

public class Vendor 
{ 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public Vendor(string firstName, string lastName) 
    { 

     FirstName = firstName; 
     LastName = lastName; 
    } 
} 

이 본질적으로 납품업자의 내 .csv 파일을 받아 문자열 배열로 밀어 개체를 생성하고 배열 값으로 속성을의 채운다 : 여기

내 공급 업체 클래스입니다 Vendor 형의리스트 이 메서드는 오류를 throw하지 않습니다.

private void ReadFromFile() 
{ 
    string line = "";     
    while ((line = myReader1.ReadLine()) != null) 
    { 
     string[] data = line.Split(',');      
     Vendor v = new Vendor(data[0], data[1]); 
     store.Vendors.Add(v); 
    } 
} 

나는 목록에 항목을 추가하기위한이 같은 솔루션을하려고 할 때, 내 항목 클래스에있는 유형 공급 업체의 한 속성입니다 항목의 "소유자"를 전달하고 싶습니다. 생성자에서 객체를 매개 변수로 전달할 때 작동하는 솔루션을 얻을 수 없기 때문에 공식 데이터 유형을 전달하는 방법을 고수하기로 결정했습니다. 기본적으로 이름이 & 성인 공급 업체의 속성을 사용하고 항목 소유자의 이름과 성으로 설정하려고합니다.

public class Item 
{ 
    public string Title { get; set; }   

    public decimal Price { get; set; }    

    public Vendor Owner { get; set; } 

    public Item(string title, decimal price, string fName, string lName) 
    { 
     Title = title;    
     Price = price; 
     Item.Owner.FirstName = fName; // this is what I want to do 
     Item.Owner.LastName = lName; // throws objref error 
    } 
} 

//Input file format: title,price,fname,lname 
while ((line = myReader2.ReadLine()) != null) 
{ 
    string[] data2 = line.Split(','); 
    decimal price = decimal.Parse(data2[1]);        
    Item i = new Item(data2[0],price,data2[2],data2[3]);     
    store.Items.Add(i); 
} 

문자열은 배열에 그것을 만들,하지만 난 디버거를 실행하고 내 store.Items 목록을 확인할 때, 모든 속성 값은 null의 소유자를 제외한 설정됩니다. 어떻게 든 하나의 솔루션은 fName + lName을 하나의 문자열로 결합 할 수 있다는 것을 알고 있지만, 필자는 Item 생성자가 어떤 매개 변수를 받아들이는지 설정하는 방법을 이해하는 데 어려움을 겪고 있습니다. 내가 시도한 것에 상관없이 Oner 속성은 절대로 값을받지 못하기 때문에 나머지 응용 프로그램이 중단됩니다.

저는 몇 시간 동안이 작업을 해왔습니다. 그러나이 시나리오에서 해결 방법이나 해결 방법을 찾지 못했습니다.

도움을 주시면 대단히 감사하겠습니다.

감사합니다.

답변

0

난 당신의 코드도 컴파일 생각하지만, 당신이 원하는 것은 이것이다하지 않습니다

Owner = new Vendor(fName, lName); 

이 본질적으로 Vendor 인스턴스를 생성하고 Owner 변수에 할당합니다. Owner은 그렇지 않으면 초기화되지 않고 null입니다. 그래서 예외가 발생합니다. 대신이의

는 : Item.Owner가 실제로 생성되지 않기 때문에

Item.Owner.FirstName = fName; // this is what I want to do 
Item.Owner.LastName = lName; // throws objref error 
+1

이것은 마치 마법처럼 일, 빠른 응답 해 주셔서 감사합니다! 그리고 네, 코드를 컴파일하지 않았을 게시, 나는 단지 내가 뭘하려고했는지에 대한 아이디어를 보여주고 싶었어요. 다시 한 번 감사드립니다! –

0

당신은 예외가 있습니다. 수정이 :

public Item(string title, decimal price, string fName, string lName) 
{ 
    Title = title;    
    Price = price; 
    Item.Owner = new Vendor(fName, lName); 
} 

또한

: 당신은 왜 'Item.Owner'작성하려면 어떻게해야합니까? static 인 것 같지 않습니다. 단지 Owner 만 사용하십시오.

+0

답변 주셔서 감사합니다. Item.Owner를 사용하여 이름 및 성 속성에 액세스하려고했습니다. 그것이 예상대로 작동하지 않는다는 것을 알게되면, 나는 그것을 달성하기 위해 노력하고있는 것에 대한 단서를 제공하기 위해 그것을 남겨 두었습니다. 감사! –

+0

이 코드는 컴파일되지 않습니다 – thumbmunkeys

+0

방금 ​​Item.Owner 대신 소유자를 사용했습니다. 위의 게시물에서 언급하지 않았습니다. 모든 것이 컴파일되고 예상대로 작동합니다. –

0

클래스에서 다른 클래스의 멤버 인 경우 new로 초기화합니다.

그래서 생성자

, 당신은 다음을 할 거라고 :

public Item(string title, decimal price, string fName, string lName) 
    { 
     Title = title;    
     Price = price; 
     Owner = new Vendor(fName, lName); 
+0

답변 주셔서 감사합니다. –

관련 문제