2017-12-21 60 views
0

속성을 사용하여 응용 프로그램의 XML 구성 파일을 읽고 쓰고 Windows.Forms.PropertyGrid를 사용하여 표시하는 직렬화 가능 속성 객체에 속성을 사용하고 있습니다. 이를 달성하기 위해 C# Attributes를 사용하고 속성 값을 결합하여 [Description][DefaultSettingValueAttribute]이 포함되도록하고 싶습니다. 나는 방법에C#에서 속성 결합하기

`[Category("General")] 
[global::System.Configuration.DefaultSettingValueAttribute("sample.txt")] 

[Description("Default Filename: " + 
global::System.Configuration.DefaultSettingValueAttribute] 

public string DefaultFileName { get; set; } = "sample.txt";` 

어떤 제안 : 내가 할 수 있도록하고 싶습니다 무엇

`[Category("General")] 
[Description("Default Filename")] 
[global::System.Configuration.DefaultSettingValueAttribute("sample.txt")] 
public string DefaultFileName { get; set; } = "sample.txt";` 

가의 라인에 뭔가 :

예를 들어, 여기에 하나 개의 속성이 정의하는 방법이다 이것을 달성 할 수 있을까요?

+0

매우 명확하지 않습니다. 'Description' 속성에 문자열이 포함되어 있다면, 원하는 문자열을 포함 할 수 있습니다. 그러나 문자열에 속성을 추가하려고하는 것처럼 보입니다. –

+0

정확합니다 - 문자열에 속성을 추가하려고합니다 (차례로 다른 속성의 값임). 다른 속성 사이에 "sample.txt"를 수동으로 복사하지 않으려 고합니다. 한 번 "DefaultValue"를 정의한 다음 해당 값을 다른 속성에 다시 사용하려고합니다. – user9128309

답변

0

두 개의 문자열이 다른 의미를 지니고 있다면, 나는 그것을 결합하지 않을 것입니다. 만약 당신이 그들을 결합한다면 당신은 가지고있는 것이 하나의 큰 문자열이며, 코드의 어떤 부분이 그 문자열을 본다면 그것을 원래의 조각으로 다시 파싱하는 방법을 알아야합니다.

두 문자열을 포함하는 속성을 쉽게 만들 수 있습니다. 예 :

public class SomeAttribute : Attribute 
{ 
    public SomeAttribute() { } 

    public SomeAttribute(string category, string description) 
    { 
     Category = category; 
     Description = description; 
    } 
    public string Category { get; set; } 
    public string Description { get; set; } 
} 

이들을 조합 할 필요는 없습니다.

그러나 또 다른 질문은 어떻게 든 관련되는 값이 실제로 동일한 속성에 속하는지 여부입니다. 귀하의 속성이 어떻게 사용되는지 모르겠습니다. 그러나 본질적으로 관련이 없으면 별도의 특성으로 유지하는 것이 더 나을 수도 있습니다. 두 문자열 사이에 논리적 구분이 있으면 두 개의 문자열을 사용하고 속성에 대해서도 두 문자열을 사용하십시오.

public class BaseAttribute : Attribute 
{ 
    public BaseAttribute() { } 

    public BaseAttribute(string defaultValue = null) 
    { 
     DefaultValue = defaultValue; 
    } 
    public string DefaultValue { get; set; } 
} 

public class SomeAttribute : BaseAttribute 
{ 
    public SomeAttribute() { } 

    public SomeAttribute(string category, string description, string defaultValue = null) 
     :base(defaultValue) 
    { 
     Category = category; 
     Description = description; 
    } 
    public string Category { get; set; } 
    public string Description { get; set; } 
} 

지금 두 번째 속성은 자신의 속성을 포함 플러스 기본 속성의

: 하나 개의 속성이 다른 상속을 위해 당신이 할 수 있습니다 무엇을

아니면입니다.

+0

감사합니다. 아마도 내가 처음에 명확하게해야 했었습니다. 궁극적으로 Windows.Forms.PropertyGrid에 속성을 표시/편집하기 위해 사용자 지정 특성을 피하는 이유였습니다. 사용자 지정 특성을 사용하여 시도했지만 PropertyGrid에서 사용자 지정 특성을 인식하고 설명과 같은 항목을 올바르게 표시 할 수 없습니다. 그래서 당신이 나를 PropertyGrid 기본 클래스 대신 내 자신의 특성을 사용하여 얻을 수있는 방법을 가리킬 수 없다면 내 시나리오에서 작동하지 않습니다. – user9128309