나는 C #클래스를 작성했다.
코드 리팩터가 제안한이 제안을 발견했습니다. 그리고 나는 didnt한다.
이 제안 / 개선을 제안했을 때이 도구가 의미하는 바를 정확하게 얻으십시오.
상황 :
this.Text 속성을 사용하여 Form 클래스의 생성자에서 제목을 설정했습니다.
Form()
{
//some initialization code ...
//...
this.Text = "Non modal form"; //Suggestion offered here..
}
코드 리팩터 툴은 경고 메시지를 표시합니다.
이 문제를 해결하기 위해 도구가 자동으로 속성을 추가했습니다.
public override sealed string Text
{
get { return base.Text; }
set { base.Text = value; }
}
아무도 날 봉인 된 속성을 추가하는 방법에 영향을줍니다 / 상황을 개선하는 방법을 설명 할 수 있습니다.
건배
생성자에서 가상 멤버를 호출하고 있습니다. 클래스가 상속되고 해당 속성이 호출되면 코드가 실행됩니다. 이것을 봉인하면 (자), 아이 클래스에서 오버라이드 (override) 할 수 없기 때문에, 이것을 막습니다. 이 특정 예제에서는 영향을 미치지 않습니다.
파생 클래스가 없기 때문에 도움이 될 것입니다.override
그것.
당신이Form
, 다른 옵션은 초기화 코드를Load
이벤트 핸들러 (Jon Skeet이리) :
Load += delegate
{
this.Text = "Non modal form";
};
Load 이벤트를 사용하면 봉인 된 속성을 만드는 것보다 훨씬 간단합니다. 특히 둘 이상의 가상 속성에 액세스하는 경우 특히 그렇습니다.
당신이virtual
속성을 생성자에서 사용하는 경우 리팩토링 도구는 속성을 봉인하여상속 된 클래스에서 값을 변경할 수 없습니다.상속 된 클래스에서 재정의 할 수 없습니다.
이것은 성능을 향상시키지 않으며 당신이 가지고있는 시나리오에서 의미가 없습니다 (Form
).그래서 나는 그것을 무시할 것이다..
InitiliseComponents
? 따라서이 문맥 (정확하게 중첩 된 계층 구조는 아닙니다)에서 나는 그것을 무시할 것입니다. - Aliostad