2010-07-22 4 views
3

이것은 적절하지는 않지만 최근에 생각한 것과 같습니다. 예를 들어 XmlSerialize 클래스에 XmlAttribute를 가져오고 있습니다. 속성을 클래스에 설정하여 직렬화해야 할 속성을 선택할 수 있지만, 같은 작업은 Iormlialial 인터페이스를 구현하여 매우 쉽게 수행 할 수 있습니다 , 기억이 안나요) 그리고 직렬화 (serialize)하는 클래스에 대한 메소드를 오버로드하면 직렬화 (this.myProp1.Serialize()), 직렬화하려는 속성에서 직렬화C#에서 속성/인터페이스를 사용하는 차이점

그래서 저는 기본적으로 말하는 : 속성 방법 조금 중복되지 않습니까? (나는 실제로 그것을 좋아하지만, 내가 인터페이스에서 그것을 논리적으로 다른 찾을 수없는) 나는이 그냥 생각입니다 말했듯이, 어떤 답변을

감사합니다 ... 희망 누군가가 발견 할 것이다 그것은 흥미

업데이트 1 : 글쎄 내가 잘못된 방법으로 설명했다. 내가 묻는 것은 "인터페이스 (또는 반대) 대신 특성을 선택해야하는 이유"이다. 정확히이 특정 사례가 아니다. 내 마음 속에 떠오르는 것), 그런데 아주 흥미 롭기 때문에 대답을 주셔서 감사합니다.

답변

4

글쎄, 내가 말할 수있는 것부터는 논리적으로 다릅니다.

구현 IXmlSerializable을 구현하면 클래스 구현에 인터페이스와 하나 이상의 메서드를 추가하기 때문에 클래스 자체에 직접적인 영향을줍니다. 본질적으로, 당신은 자신의 클래스를 직렬화에 대해 직접 책임감있게 만들고 있습니다.

그러나 XmlAttribute 특성을 추가해도 클래스의 기능에 직접적인 영향을주지는 않지만 XmlSerializer가 실제 serialization 기능을 수행 할 수 있도록 특성으로 꾸미기 만하면됩니다. 이 경우 직렬화를 XmlSerializer 클래스로 연기하고 XmlSerializer가 해당 작업을 수행 할 수 있도록 클래스에 대한 충분한 메타 데이터 만 제공합니다.

이것이 내가 후자의 속성 접근법을 선호하는 이유입니다. 클래스를 작성할 때 클래스를 직렬화 할 수 있기를 바랍니다.하지만 마지막으로 신경 쓰는 것은 구현의 세부 사항입니다. 그래서 저는 항상 thaqt 방식으로 시작하고 거의 작동하지 않아도 잘 작동하는 시간의 99 %부터 시작합니다. 그러나 serialization에 대한 세부적인 제어가 필요하다면 IXmlSerializable 인터페이스를 구현하고 사용자 고유의 serialization 코드를 작성하십시오.

1

프로그래밍 방식으로 인터페이스를 구현하면 더 많은 정보를 얻을 수 있습니다. c ontrol (속도는 더 빨라질 수는 있지만) 속성 메소드보다 생성하고 관리하는 것이 더 어렵습니다. 나는 주로 속성을 사용합니다. 의견 및 downvote에서

+0

이 답변은 정확 한 것처럼 보입니다. 그렇다면 왜 그 이유는 무엇입니까? –

8

, 어쩌면 내가 여기 내 주요 지점을 선택해야 나에게 시간 (유형별) 작업과 끔찍한 코드의 복잡성을 절약 할 수 있습니다 뭔가를 매우 중복,하지만 매우, 매우 환영하지입니다 .


"아주 쉽지"? 승인; 나는 serialization에서 꽤 경험이 있지만 구현은 이 아니라 내가 쉽게 호출한다. 사실 반대로.

속성을 사용하지 않으려는 경우 런타임에 구성 할 수있는 XmlSerializer의 오버로드가 있습니다.

그러나 "implement IXmlSerializable"을들을 때마다 나는 떨립니다.

[XmlRoot("foo"), XmlType("foo")] 
[XmlInclude(typeof(SuperFoo))] 
public class Foo { 
    public string X {get;set;} 

    [XmlAttribute("y")] 
    public int? Y {get;set;} 

    [XmlElement("item")] 
    public List<string> Items {get;set;} 
} 
public class SuperFoo : Foo {} 

난 당신이 ... 2에서 시간이 아주 간단한 예를에 대한 IXmlSerializable강력한 구현을 작성하고 당신이 쓰는 모든 라인이 기억하는 도전 : 속성 접근 방식은 매우 쉽고 빠르게 당신이 유지해야 할 라인.

+0

@Marc, 나는 똑같은 말을하려고했는데 어쩌면 내가 바보라고 생각했다. IXmlSerializable로 다이빙을 시도 할 때마다 노동 집약적 인 것처럼 보였습니다. –

+0

@serhio - 다음에 철자를 쓰십시오. 수업 당 많은 시간을 절약 해주는 것이 중복되지 않습니다. –

+0

당신은 아마 그 도전에 대해 심각하지 않습니다. 그리고 분명히 알고 있겠지만 인터페이스를 구현할 때의 장점은 프로세스를 직접 제어 할 수 있다는 것입니다. 즉, XML 구조의 버전을 훨씬 쉽게 변경할 수 있으며 데이터 구조 변경 사이에서 XML 구조를 전환 할 수 있습니다. 속성 메소드를 사용하여 할 수 없습니다. –

1

속성을 선택하여 속성과 직렬화 할 수 있습니다. 인터페이스의 구현은 코드에 의한 직렬화입니다.

관련 문제