2010-05-25 2 views
0

아래 예와 같이 많은 기존 .Net 1.1 스타일 코드를 보았습니다.이 코드는 자동 속성을 사용하여 축소하고 싶습니다. 이것은 많은 수업이 30-40 % 줄어들 때 도움이 될 것이라고 생각합니다.이 .Net 1.1 샘플을 리팩토링 할 때 자동 속성을 활용하는 방법?

public int MyIntThingy 
{ 
    get; 
    set; 
} 

을 그리고 유일한 질문은 - 내가 MyIntThingy = -1;을 설정하는 경우 :

public int MyIntThingy 
{ 
    get 
    { 
     return _myIntThingy; 
    } 

    set 
    { 
     _myIntThingy = value; 
    } 
} private int _myIntThingy = -1; 

이 될 것입니다?

처음부터 수업을 쓴다면 더 좋은 아이디어를 얻었지만 나는하지 않았습니다. 분명한 대답은 생성자에 넣는 것입니다. 문제는이 클래스에 많은 생성자가 있다는 것입니다. 디버거에서 -1 초기화를 보면서, 나는 그것이 생성자가 호출되기 전에 일어난다 (나는) 믿는다. 마치 여기에 설명 된 것처럼 정적 생성자를 사용해야하는 것처럼 보입니다. http://www.c-sharpcorner.com/uploadfile/cupadhyay/staticconstructors11092005061428am/staticconstructors.aspx 을 제외하고는 내 변수가 정적이 아닙니다. 자바의 정적 이니셜 라이저가 떠오르지 만, 다시 말해, 변수는 정적이 아닙니다. http://www.glenmccl.com/tip_003.htm

이 클래스의 문체는 있지만 기능은 변경하지 않으려합니다. 그것이 진절머리 나는 것처럼, 그것은 몇 년 동안 시험되고 일을했습니다. 기능을 깨뜨리는 것은 나쁠 것입니다. 그래서 ... 나는 더 짧고, 더 달콤하고, 더 귀여우면서도 평등 한 코드를 찾고 있습니다. 질문이 있으면 알려주세요.

+2

나는 그대로 두십시오. 그것은 사소한 세부 사항이며 자동 속성은 기본값을 필요로 할 때만 사용할 수 있습니다. 여기에는 기본값이 필요하지 않으므로 자동 속성을 사용할 수 없습니다. –

+0

:) 우리 중 일부는 다른 것보다 세부 정보에 더 집착합니다. –

답변

1

옵션이없는 것 같습니다.

초기 값이 유형의 기본값과 다른 자동 속성을 사용하려면 생성자에 초기 값을 설정해야합니다.

+0

신선한 코드에서 자동 속성을 사용하면 생성자의 값을 초기화해야하므로 로직을 쉽게 따라 할 수 있다는 점에 동의하십니까? 도구가 도움이되지 않는다면,이 클래스의 모든 생성자를 분석하여 깨끗하게 만들 수 있습니다. 이 모든 것을'init()'메소드에 넣고 모든 생성자의 첫 번째 라인에서'init'을 호출하는 것을 고려하고 있습니다. –

+0

@Hamish 그게 내가 하나 이상의 생성자를 가질 것이라는 것을 알 때 내가하는 일입니다. 유일한 문제 (위의 "그대로 두십시오"의 이유)는 ** 변경 사항으로 인해 무언가를 깨뜨릴 수 있습니다. 당신이 말했듯이, "기능을 망칠 수있는 기회가 언제 생길까요?" –

1

당신은 단지 문체, 비 주요 변경이 필요한 경우, 약간의 형식 변경을 고려 :

public int MyIntThingy 
{ 
    get { return _myIntThingy; } 
    set { _myIntThingy = value; } 
} 
private int _myIntThingy = -1;  

예뻐 것을되지 않습니다?

향후 코드에만 자동 속성을 사용하는 것이 좋습니다. 기본값이없는 경우를 제외하고는 기존 코드에서 사용하기에는 너무 위험합니다.

+0

우리는 StyleCop을 더욱 행복하게하려고합니다. 그것이 생성하는 경고의 수를 줄이십시오; 우리의 내부 규칙뿐만 아니라 중괄호는 항상 (예외를 생각할 수 없다) 그 자체의 라인에 있어야한다고 지시합니다. –

+0

그러면 네가 가지고있는 걸로 붙어 있다고 생각해. IMO는 노력할 가치가 없으며 위험을 감수할만한 가치가 없습니다. –