2012-11-20 3 views
0

그래서 나는 수업이 있습니다내 값이 내 클래스의 속성에 전달되지 않는 이유는 무엇입니까?

public class Person 
{ 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 

    public Person() 
    { 
     AddPerson(); 
    } 

    private void AddPerson() 
    { 
     string fn = this.Firstname; 
     string ln = this.Lastname; 
     // Do something with these values 
     // Probably involves adding to a database 
    } 

} 

을 그리고 유형 Person의 객체 반환 객체를 인스턴스화하고 데이터베이스에 추가합니다 몇 가지 코드가 있습니다, 그러나

Person me = new Person() 
{ 
    Firstname = "Piers", 
    Lastname = "Karsenbarg" 
}; 

을 이 디버깅하고 메서드를 얻을 수, 속성 this.Firstnamethis.Lastname (이 경우 비어 있음) 아무것도 있지 않습니다.

어디로 잘못 가고 있습니까?

+1

_ "? 어디 잘못된 것입니다"_ - 당신 ' 생성자를 사용 가능한 상태로 가져 오는 것보다 더 많은 작업을해야합니다. 'AddPerson'이 사람을 데이터베이스에 추가하는 경우, 이는 Person 메소드라는 것이 판명 될 수 있지만, 그 시점에서 필요하다면, public이어야하고 적절하게 이름을 붙여야합니다 ('AddPersonToDatabase'). 자동적으로 호출되어서는 안됩니다 , 생성자에서 보자. – CodeCaster

답변

6

이것은 생성자가 호출 된 후에 속성이 할당되기 때문입니다. Basicaly이 여기

Person me = new Person(); 
me.Firstname = "Piers"; 
me.Lastname = "Karsenbarg"; 

차이점 구문 :

Person me = new Person() 
{ 
    Firstname = "Piers", 
    Lastname = "Karsenbarg" 
}; 

는 동일한 같다. 귀하의 경우 매개 변수화 된 생성자 (new Person("Piers", "Karsenbarg"))를 통해 이러한 변수를 전달할 수 있습니다.

+0

다음은 어떻게하면 좋을까요? 그저 추가하는 다른 방법이 있을까요? 따라서 새 객체를 인스턴스화 한 다음 save 메소드를 실행하는'me.Save() '를 호출하십시오. (아마도'AddPerson()'메소드와 똑같은 일을 할 것입니다. 대신 공용으로 사용 하시겠습니까? –

+0

업데이트를 보았습니다. –

+0

몇 가지 방법이 있는데, 필요한 것이 무엇인지에 달려있다. (당신의 질문에서 볼 수 있듯이) 매개 변수화 된 생성자를 추천했다. – Zbigniew

1

속성에 값을 할당하지 않았습니다. 난 당신이 생성자에서 원하는 이름을 전달 제안 :

public class Person 
{ 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 

    public Person(string firstname, lastname) 
    { 
     this.Firstname = firstname; 
     this.Lastname = lastname; 
     AddPerson(); 
    } 

    private void AddPerson() 
    { 
     string fn = this.Firstname; 
     string ln = this.Lastname; 
     // Do something with these values 
     // Probably involves adding to a database 
    } 

} 

사람은 FIRSTNAME 또는 LASTNAME 없이는 존재할 수 없습니다 그래서 이것은 논리적 의미가

+1

_ "사람은 이름이나 성 없이는 존재할 수 없다."- 응용 프로그램의 제약 조건을 감안할 때 단정 짓일 수도 있지만, [Falsehoods Programmers는 이름에 대해 믿는다.] (http://www.kalzumeus.com/2010/06/17/falsehoods- 프로그래머 - 믿을만한 이름 /) – CodeCaster

+0

@CodeCaster 재미있는 기사 - 고마워요! – Liath

관련 문제