[C#] 가장 유용한 속성 [닫기]

속성이 매우 유용하다는 것을 알고 있습니다. [Browsable(false)]속성 탭에서 속성을 숨길 수있는 것과 같은 미리 정의 된 것들이 있습니다 . 다음은 특성을 설명하는 좋은 질문 입니다. .NET의 특성은 무엇입니까?

프로젝트에서 실제로 사용하는 사전 정의 된 속성 (및 네임 스페이스)은 무엇입니까?



답변

[DebuggerDisplay]디버깅하는 동안 Type의 인스턴스 위로 마우스를 가져 가면 Type의 사용자 정의 된 출력을 빠르게 볼 수 있습니다. 예:

[DebuggerDisplay("FirstName={FirstName}, LastName={LastName}")]
class Customer
{
    public string FirstName;
    public string LastName;
}

이것이 디버거에서 어떻게 보이는지입니다.

대체 텍스트

또한 속성이 설정된 [WebMethod]속성 CacheDuration은 웹 서비스 메서드의 불필요한 실행을 피할 수 있습니다.


답변

System.Obsolete내 의견으로는 프레임 워크에서 가장 유용한 속성 중 하나입니다. 더 이상 사용해서는 안되는 코드에 대한 경고를 발생시키는 기능은 매우 유용합니다. 나는 개발자에게 무언가를 더 이상 사용해서는 안된다고 말하고, 왜 더 좋은 / 새로운 것을하는 방법을 설명 할 수있는 방법을 갖는 것을 좋아합니다.

Conditional attribute디버그 용도로도 매우 편리합니다. 릴리스 할 솔루션을 빌드 할 때 컴파일되지 않는 디버그 목적으로 코드에 메소드를 추가 할 수 있습니다.

그런 다음 유용하다고 생각되는 웹 컨트롤과 관련된 많은 속성이 있지만 더 구체적이며 내가 찾은 서버 컨트롤 개발 이외의 용도는 없습니다.


답변

[Flags]꽤 편리합니다. 구문 설탕은 확실하지만 여전히 좋습니다.

[Flags]
enum SandwichStuff
{
   Cheese = 1,
   Pickles = 2,
   Chips = 4,
   Ham = 8,
   Eggs = 16,
   PeanutButter = 32,
   Jam = 64
};

public Sandwich MakeSandwich(SandwichStuff stuff)
{
   Console.WriteLine(stuff.ToString());
   // ...
}

// ...

MakeSandwich(SandwichStuff.Cheese
   | SandwichStuff.Ham
   | SandwichStuff.PeanutButter);
// produces console output: "Cheese, Ham, PeanutButter"

Leppie 는 내가 깨닫지 못했고이 속성에 대한 열정을 약화시키는 것을 지적합니다. 비트 변수를 열거 변수에 유효한 값으로 허용하도록 컴파일러에 지시 하지 않으며 컴파일러는 열거에 관계없이 이것을 허용합니다. 내 C ++ 배경을 통해 보여줍니다 … 한숨


답변

[DebuggerStepThrough]System.Diagnostics에서 좋아 합니다.

자동 속성없이 초기 .Net에서 작업 해야하는 경우 한 줄 할 일이없는 방법이나 속성으로 들어가는 것을 피하는 데 매우 편리합니다. 속성을 짧은 메서드 나 속성의 getter 또는 setter에 넣으면 디버거에서 “step into”를 눌렀을 때도 바로 비행 할 수 있습니다.


답변

가치있는 것을 위해, 여기 에 모든 .NET 속성의 목록이 있습니다. 수백이 있습니다.

나는 다른 사람에 대해 모르지만 할 수있는 심각한 RTFM이 있습니다!


답변

내 투표는 Conditional

[Conditional("DEBUG")]
public void DebugOnlyFunction()
{
    // your code here
}

이를 사용하여 고급 디버깅 기능이있는 기능을 추가 할 수 있습니다. 처럼 Debug.Write디버그 빌드에서만 호출되므로 프로그램의 주요 흐름 외부에서 복잡한 디버그 논리를 캡슐화 할 수 있습니다.


답변

난 항상을 사용 DisplayName, Description그리고 DefaultValue내 사용자 컨트롤, 사용자 지정 컨트롤이나 내가 속성 그리드를 통해 편집 할 수 있습니다 모든 클래스의 공용 속성을 통해 속성. 이 태그는 .NET PropertyGrid에서 이름, 설명 패널 및 기본값으로 설정되지 않은 굵은 체 값의 형식을 지정하는 데 사용됩니다.

[DisplayName("Error color")]
[Description("The color used on nodes containing errors.")]
[DefaultValue(Color.Red)]
public Color ErrorColor
{
    ...
} 

DescriptionXML 주석이 없으면 Visual Studio의 IntelliSense가 속성을 고려하기를 바랍니다. 같은 문장을 두 번 반복하지 않아도됩니다.