문제

내가 있는 클래스의 무리와 함께 하는 속성과 같습니다:

public string Name
{
    get { return _name; }
    set { IsDirty = true; _name = value; }
}

그것은 훨씬 쉽게 될 수 있다면 나에 의존 C#3.0 를 생성하는 역행 저장에 대한 이지만,하는 방법은 없는 요인으로 IsDirty=true;그래서 내가 쓸 수 있는 속성이 무언가가 다음과 같이 여전히 동일한 행동:

[MakesDirty]
public string Name { get; set; }
도움이 되었습니까?

해결책

No.지 없이 쓰는 상당히 더 많은(충격?) 코드보다는 원래전 (를 사용해야 할 것입니 반영을 확인하는 특성에 대한 속성에 어떤하지 않습니다..나는 그것을 언급되는'느리게')..이 종류의 복제가 있습니다.

MS 같은 위한 필요 올리는 이벤트는 경우는 변경된.INotifyPropertyChanged 는 중요한 인터페이스 변화를 위한 알림입니다.모든 구현은 나는 아직 보 가

set
{ 
  _name = value; 
  NotifyPropertyChanged("Name"); 
}

가능했던 경우에,나는 그림들 똑똑한 사람 MS 것이 이미 있는 뭔가 좋아하는 장소에서..

다른 팁

당신이 시도할 수 있습을 설정 코드 조각을 쉽게 만듭니다.

당신이 정말로 원하는 경우 이동하는 방법으로,수정하는 것은 코드를 사용하여 특성,거기에 몇 가지 방법으로 그것을 하고 그들은 모두 관련 AOP(Aspect oriented programming).체크아웃 PostSharp, 는 aftercompiler 수 있는 코드를 수정에서 컴파일한 후에는 단계입니다.예를 들어,당신은 설정할 수 있습 중 하나는 사용자 정의 속성에 대한 귀하의 속성(또는 측면에서 호출되는 방식 AOP)는 코드를 삽입부 시설들을 표시하는 귀하의 개체로 더럽습니다.하려면 몇 가지의 예에는 이를 구현하는 방법을 확인할 수 있습니다 그들의 튜토리얼.

하지만 조심으로 AOP 고 할 수 있기 때문에 그냥 쉽게 만들이 더 사용하여 문제를 해결하려는 사용하지 않을 경우 맞다.

더 많은 AOP 프레임워크 거기에 몇 가지를 사용하시 컴파일하고 몇 가지 방법을 사용하여 차단하는 메커니즘이 존재합니다.Net,나중에 몇 가지 성과에 비해 단점이다.

No,을 사용할 때 자동적인 속성이 있지 않는 어떤 제어 구현됩니다.최고의 옵션을 사용하는 것입 템플릿 도구,코드 조각을 만들거나 개인 SetValue<T>(ref T backingField,T value)캡슐화하는 세터는 논리입니다.

private void SetValue<T>(ref T backingField, T value)
{
   if (backingField != value)
   {
      backingField = value;
      IsDirty = true;
   }
}

public string Name
{
   get
   {
      return _name;
   }
   set
   {
      SetValue(ref _name, value);
   }
}

다른 대안이 될 수 있는 코드로 발전기와 같은 codesmith 자동화를 만들의 속성.이 경우 특히 유용성을 만들은 열에 데이터베이스 테이블

나는 사용하는 것이 좋습니다 엔터프라이즈 라이브러리 는 것을 그 목적으로 한다.사항 응용 프로그램 블록을 제공합 인프라 to"something"(가=할 수 있는 코드에 당신의 자신의)할 때마다 당신이 입력/출는 방법은 예입니다.을 제어할 수 있습니다 동작을 속성이 있습니다.그 힌트로는 세부 사항으로 가서와 엔터프라이즈 라이브러리입니다.

가 defaultvalueattribute 와에 할당할 수 있는 재산,이것은 주로 사용되는 디자이너에 의해 도구가 그들을 나타낼 수 있는 경우 속성이 변경되었지만,그것은 될 수 있습니다"깔끔한"방법을 설명하는 무의 속성에 대한 기본값이고,따라서 식별 할 수있는 경우 그 변경되었습니다.

당신을 사용할 필요가 반영을 확인 속성 변경-지 않는 실제로 비싸지 않는 한 당신이 하고 있는 그것의 많은!

주의:당신이 할 수 없을 것을 말하는 경우 속성이 변경되었다 뒤에서 기본값이 아닌 값을 기본으로 하나입니다.

내가 말하는 가장 좋은 방법이 해를 사용하여 이 측면이 지향 프로그래밍(AOP).매트 Helander 했 쓰이에서 측.이 문서는 조금 더러운,그러나 그것의 가능하다.의 번호가 있는 다른 제품 않 AOP 니다.순간,나는 추천 PostSharp.

으로 이동 할 경우 특성,확실히 거짓말을 해야하는 자신의 롤 로직 을 추론 그들은 무엇을 의미하고 무엇을 할 것들입니다.무엇을 사용하여 사용자 지정 등 개체 있어야 할 것이의 방법으로 수행하는 이러한 특성이 조치/체크,바람직하게는 인스턴스화.

그렇지 않으면 당신이 찾고있는에서 사용하는 어쩌면 이벤트입니다.당신은 여전히 추가해야 하는 이벤트의 모든 설정 방법,그러나 이점이 있겠지 하드 코딩에 대해 무엇을 더러운 설정에서 모든 재산을 제어할 수 있습니다,한 곳에서 무엇을 할 수 있다.는 것,적어도,비트를 소개하는 코드를 더하여 재사용할 수 있습니다.

ContextBound 개체입니다.는 경우에 당신은 클래스를 만드는 것이다:컨텍스트에 묶인 개체를 만들 ContextAttribute 당신을 가로챌 수 있는 호출하는 등의 시설과 설정 IsDirty..네트가 프록시를 만들려는 당신의 클래스를 모든 통화를 통해 갈 같은 원격다.

문제로 이러한 접근은 비록 귀하의 프록시만 호출될 때라고 외부.내가 당신에게 예입니다.

class A
{
    [Foo]
    public int Property1{get; set;}
    public int Property2{get {return variable;} set{ Property1 = value; variable = value; }
}

때 property1 라는 다른 클래스에서,귀하의 프록시는 것 호출됩니다.그러나면 다른 클래스 통화 property2 도의 설정 property2 전화로 property1 프록시가 호출됩,(프록시 필요하지 않을 때에는 자체 클래스).

의 많은 예제 코드 밖의 사용하여 ContextBoundObjects,그것을 보고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top