我有三个类ClassB,ClassC和ClassD都是从ClassA类(这是一个空类)派生的。
我根据对象的类型创建了一个带有GetInformation的[操作合同]的WCF服务,该方法的参数是复杂的对象ClassA。
当我调用WCF对象时,我按三个类(ClassB,ClassC或ClassD)之一初始化ClassA对象。
我知道空类通常是设计上的缺陷,但是对于我而言,这是否是最佳选择,或者该方案的最佳设计是什么?
ClassA是一个空的超类 这是我的代码
[KnownType(typeof(ClassB))]
[KnownType(typeof(ClassC)))]
[KnownType(typeof(ClassD))]
[DataContract]
public class ClassA
{
}
ClassB是从ClassA派生的
[DataContract]
public class ClassB: ClassA
{
[DataMember]
public int num1{ set; get; }
}
ClassC是从ClassA派生的
[DataContract]
public class ClassC: ClassA
{
[DataMember]
public int num1{ set; get; }
[DataMember]
public int num2{ set; get; }
}
ClassD是从ClassA派生的
[DataContract]
public class ClassD: ClassA
{
[DataMember]
public string val1{ set; get; }
}
GetInformation返回基于对象类型的消息
[ServiceContract]
public interface IServices
{
[OperationContract]
string GetInformation(ClassA object);
}
答案 0 :(得分:2)
您不需要创建空类。
由于这三个类 ClassB , ClassC 和 ClassD 没有通用的方法或属性。
因此您可以为每个班级创建一个运营合同:
[ServiceContract]
public interface IServices
{
[OperationContract]
string GetInformationB(ClassB objectB);
[OperationContract]
string GetInformationC(ClassC objectC);
[OperationContract]
string GetInformationD(ClassD objectD);
}
答案 1 :(得分:1)
您可以为您的课程实现接口。 sjb-sjb为您写了什么。 但我知道,您使用的类没有任何通用方法或属性。只有
public class ClassC: ClassA
{
[DataMember]
public int num1{ set; get; }
[DataMember]
public int num2{ set; get; }
}
和
[DataContract]
public class ClassB: ClassA
{
[DataMember]
public int num1{ set; get; }
}
您可以这样重写它:
public class ClassC: ClassB
{
[DataMember]
public int num2{ set; get; }
}
在设计应用程序时可能会出现问题。 并尝试使用组合而不是Inheritanse或接口。为什么? 您可以在这篇文章中了解它:
或那里:
https://codeburst.io/inheritance-is-evil-stop-using-it-6c4f1caf5117