2015-02-03 7 views
0

XmlSerializer를 구현하기 위해 Base 개체 클래스를 구현하고 있습니다.기본 클래스는 그것을 구현하는 개체의 속성을 알 수 있습니까?

class FN_ObjectBase 
{ 
    public object FromXML(string xml) 
    { 
     var serializer = new XmlSerializer(typeof("ObjectA??")); 

     var reader = new XmlTextReader(new StringReader(xml)); 

     var scriptItem = serializer.Deserialize(reader); 

     return scriptItem; 
    } 
} 

class ObjectA : FN_ObjectBase 
{ 
    public object = new ObjectA.FromXML("serializedXML"); 
} 

어떻게 파생 클래스를 기반으로 개체를 만들려면 FromXML 메서드를 올바르게 작성할 수 있습니까?

public T FromXML<T>(string xml) 
{ 
    var serializer = new XmlSerializer(typeof(T)); 

    var reader = new XmlTextReader(new StringReader(xml)); 

    var scriptItem = serializer.Deserialize(reader); 

    return (T)scriptItem; 
} 

전화를 :

FromXML<ObjectA>("serialized xml") 

OOP 규칙 : 기본 유형 유도하지 사용하지 마십시오 유형

+1

당신은 FromXML을 추상적 인 방법으로 만들어야한다고 생각합니다. 그리고 나서 FN_ObjectBase의 파생 클래스 각각은 자신의 버전을 구현할 수 있습니다. –

+0

상속은 부모 클래스에 자녀의 책임을 지정하지 않아야합니다. 구현이 다른 경우 기본 비헤이비어를 정의하고 하위 비헤이비어에서이를 재정의 할 수 있습니다. 제목의 질문에 대한 대답은 아니오입니다. – ryanyuyu

+0

@LeslieDavies 구현의 유일한 차이점은 메서드가 호출 될 때 기본 클래스에서 메서드를 구현할 필요가 없다는 것입니다. 이 경우에는 –

답변

3

봅니다 일반적인 방법을 사용합니다.

+1

제네릭 FTW. –

0

추상 메소드가 필요하지 않으며 일반 메소드 구현이 작동하는 동안 발신자에게 약간 다른 (아마도 더 나은 것은 있지만) 신호를 전달합니다.

기본 구현의 XMLSerializer 생성자에 this.GetType()을 전달하면됩니다.