在某些情况下空 class 是正确的选择吗?
Could empty class be the right choice in some cases?
我有三个 classes ClassB 、 ClassC 和 ClassD 派生自 ClassA class (这是一个空 class)。
我根据对象的类型创建了一个名为 GetInformation 的[操作合同] WCF 服务,此方法的参数是复杂对象 ClassA。
当我调用 WCF 对象时,我通过三个 classes(ClassB、ClassC 或 ClassD)之一初始化 ClassA 对象。
我知道有一个空 class 通常是一个设计缺陷,但它是否是我的最佳选择,或者什么是这个场景的最佳设计?
ClassA 是一个空的超级 class
这是我的代码
[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 return 基于对象类型的消息
[ServiceContract]
public interface IServices
{
[OperationContract]
string GetInformation(ClassA object);
}
您可以为您的 class 实现接口。为您写了什么 sjb-sjb。
但是我明白了,你使用 classes 没有任何通用方法,或者 属性。只有
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; }
}
这可能是您设计应用程序时遇到的问题。
并尝试使用组合而不是继承或接口。为什么?
您可以在 post:
中阅读相关内容
或那里:
https://codeburst.io/inheritance-is-evil-stop-using-it-6c4f1caf5117
您不需要创建空 class。
作为三个 classes ClassB、ClassC 和 ClassD没有任何通用方法或属性。
因此您可以为每个class创建一个操作合约:
[ServiceContract]
public interface IServices
{
[OperationContract]
string GetInformationB(ClassB objectB);
[OperationContract]
string GetInformationC(ClassC objectC);
[OperationContract]
string GetInformationD(ClassD objectD);
}
我有三个 classes ClassB 、 ClassC 和 ClassD 派生自 ClassA class (这是一个空 class)。
我根据对象的类型创建了一个名为 GetInformation 的[操作合同] WCF 服务,此方法的参数是复杂对象 ClassA。
当我调用 WCF 对象时,我通过三个 classes(ClassB、ClassC 或 ClassD)之一初始化 ClassA 对象。
我知道有一个空 class 通常是一个设计缺陷,但它是否是我的最佳选择,或者什么是这个场景的最佳设计?
ClassA 是一个空的超级 class 这是我的代码
[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 return 基于对象类型的消息
[ServiceContract]
public interface IServices
{
[OperationContract]
string GetInformation(ClassA object);
}
您可以为您的 class 实现接口。为您写了什么 sjb-sjb。 但是我明白了,你使用 classes 没有任何通用方法,或者 属性。只有
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; }
}
这可能是您设计应用程序时遇到的问题。 并尝试使用组合而不是继承或接口。为什么? 您可以在 post:
中阅读相关内容或那里:
https://codeburst.io/inheritance-is-evil-stop-using-it-6c4f1caf5117
您不需要创建空 class。
作为三个 classes ClassB、ClassC 和 ClassD没有任何通用方法或属性。
因此您可以为每个class创建一个操作合约:
[ServiceContract]
public interface IServices
{
[OperationContract]
string GetInformationB(ClassB objectB);
[OperationContract]
string GetInformationC(ClassC objectC);
[OperationContract]
string GetInformationD(ClassD objectD);
}