2012-02-15 3 views
0

으로 설정하는 문이 있으면 입력 된 값보다 작은 값을 입력 할 때 최소값 7.50m을 저장하는 속성을 생성자에서 설정하려고합니다. 여기에 들어가는 코드입니다 : 속성은 이미최저 임금을 C#

public decimal PayRate 
{ 
    get 
    { 
     return payRate; 
    } 

    set 
    { 
     if (value <= 7.50m) 
      payRate = 7.50m; 
     else 
      payRate = value; 
    } 
} 

편집은 ... 문이 모든 것이 컴파일하지만 값이 < 7.5를 입력하면, 그것이 작동하지 않는 경우 난 그냥이 도움을 필요로 선언 된 값 ... EDIT 2 : 네임 스페이스 선언 다음의 코드는 변경할 수 있지만 속성을 추가 할 수 없습니다. 포맷되지 않았습니다.

static void Main(string[] args) 
    { 
     Employee e1 = new Employee("Chevy", "Jack", 'A', "987654321", 1.20m); } 

그리고 모든 것이 정의 된 네임 스페이스.

public Employee(string lName, string fName, char mi, string ss, decimal pay) 
    { 
     firstName = fName; 
     lastName = lName; 
     MiddleInitial = mi; 
     SSN = ss; 
     payRate = pay; 
    } 
+2

무엇'work'하지 않는 방법을? – zerkms

+0

나에게 잘 작동하는 것처럼 보입니다. 어떤 조건에서 실패합니까? –

+0

'payRate' 란 무엇이며 어디에 정의되어 있습니까? –

답변

2

나는 이런 식으로 생각합니다. 당신이

PayRate=6.5m // or any value less than 7.5 

를 할당 할 때 잘 작동하지만

payRate=6.5m // this won't work because you are assigning value directly to private property. 

당신이 개인 재산에 직접 값을 할당하기 때문에이 작동하지 않습니다 할당하면해야

private decimal payRate; 
    public decimal PayRate 
    { 
     get { return payRate; } 
     // i avoid use of "if else" in situations like these 
     set { payRate = (value <= 7.50m) ? 7.50m : value; } 
    } 

.

편집 : 생성자 내부

payRate=pay 

을 설정하면 귀하의 set 접근이 호출되지 않습니다. 생성자 인수에서 지불을 제거하고 나중에 Employee 인스턴스를 생성 한 후에 설정할 수 있습니다.

// create employee 
    Employee e1 = new Employee("Ford", "Joe", 'S', "123456789"); 

    // set the pay here 
    e.PayRate=1.75m; // this will invoke the set accessor and set value to 7.5m 
1

세터가 의도적으로 고장났습니다. setter는 프로퍼티를 할당 된 값으로 설정하거나 예외를 throw해야합니다.

당신이 작성해야 :

public static readonly Decimal MinimumWage = 7.50m; 

... 

set 
{ 
    if(value<=MinimumWage) 
     throw new ArgumentException(string.Format("Wage {0} must be at least the minimum wage of {1}",value,MinimumWage)); 
    payRate = value; 
}