Tag: 多态

服务 – 客户端界面,架构建议

我有一个Windows WCF服务和Web客户端。 我的服务有一种方法 [OperationContract] SubmitOrder(OrderInfo info)…. // class used to pass all relevant data [DataContract] class OrderInfo { [DataMember] OrderType Type; // general order data } 在我引入新的订单类型(由OrderInfo.Type属性控制)之前,这很棒。 您可以将新订单类型视为从一般订单(行为方面)派生而来。 每个新订单都有一些额外的属性。 实现Order的这种多态行为的最佳方法是什么? 目前,我只是在添加新订单时向OrderInfo类添加新属性。 [DataContract] class OrderInfo { [DataMember] OrderType Type; // general order data // First custom order data // Second custom order data // TODO – […]

通过扩展方法进行多态性?

我有一个类库,其中包含一些基类和从中派生的其他基类。 在这个类库中,我正在利用多态来做我想做的事情。 现在在一个消费应用程序中,我想根据子类的运行时类型更改某些代码的行为。 假设如下: public class Base { } public class Child1 : Base { } public class Child2 : Base { } 现在在消费应用程序中,我想做一些如下操作(请注意,以下所有类都在使用应用程序中,并且不能在类库中引用): public interface IMyInterface1 { } public interface IMyInterface2 { } public static class Extensions { public static void DoSomething(this Base myObj, Object dependency) { } public static void DoSomething(this Child1 myObj, […]

将派生类对象分配给父类引用

当我看到时,我总是感到困惑: Parent ref = new Child(); 其中Child类扩展Parent。 对象ref如何在内存中看起来像? 如何处理虚拟方法? 非虚? 它与以下内容有何不同: Child ref = new Child();

new()约束对类定义有什么作用?

我看到了这个代码示例,并想知道new()约束的目的是什么: public class Client : IClient where T : IClientFactory, new() { public Client(int UserID){ } }

C#:限制方法参数中的类型(不是通用参数)

我想编写如下函数 public void Foo(System.Type t where t : MyClass) { … } 换句话说,参数类型是System.Type ,我想将允许的Type限制为从MyClass派生的Type 。 有没有办法在语法上指定这个,或者必须在运行时检查?

创建类型的变量以在C#中存储对象

我对编程有些新意,我对C#中的类,inheritance和多态有疑问。 在了解这些主题的同时,我偶尔会遇到类似这样的代码: Animal fluffy = new Cat(); // where Animal is a superclass of Cat* 这让我感到困惑,因为我不明白为什么有人会创建一个类型为Animal的变量来存储Cat类型的对象。 为什么一个人不会简单地写这个: Cat fluffy = new Cat(); 我确实理解为什么将子对象存储在父类型变量中是合法的,但不是为什么它有用。 是否有充分的理由将Cat对象存储在Animal变量与Cat变量中? 一个人可以举个例子吗? 我确定它与多态和方法覆盖(和/或方法隐藏)有关,但我似乎无法绕过它。 提前致谢!

entity framework多态关联

我将很快使用Entity Framework作为预订系统(从头开始制作)。 我一直在做一些原型,试图弄清楚在项目启动之前我想做什么(我还在与客户讨论要求等)。 考虑这种情况: 我有预订,预订可以有相关的资源,可以预订,但这些资源可以不同,并有不同的字段等。 我之前从未真正使用EF,所以我不知道如何实现这种多态性,我在其他项目中使用它(我们一直在使用原始SQL)。 C#模型看起来像这样: public class Booking { public int BookingID { get; set; } public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } public IRessource Ressources { get; set; } … } public interface IRessource { public int RessourceTypeId { get; set; } } public class […]

用于避免开启类型的设计模式或接受的解决方案

我正在尝试找到一个好的,干净的设计模式或普遍接受的实现来处理类型的枚举,其中仅在运行时知道单个类型。 我之前已经问过类似的问题,但我仍然不清楚替代实现相比交换机或一系列if-thens有明显的优势。 首先,我将演示一些实现,然后我将问一个问题: 这些实现是否比简单的交换机更好或更优先? 如果是这样,为什么? 如果没有,为什么不呢? 在我的应用程序中,我通过流发送和接收数据。 在运行时,我通过序列化接收数据结构,该结构描述了我的二进制数据中的字段。 这包括字段中的数据类型,即Int32,Bool,Double等。在设计时,我所知道的是数据可能是几种类型中的一种。 我需要从流中读取字段并适当地处理数据。 如果允许启用类型,则解决方案可能如下: 非工作代码: object ReadDataField(byte [] buff, ref int position, Dictionary fields) { object value; int field = buff[position]; position++; switch(fields[field]) { case typeof(Int32): { value = (Int32)BitConverter.ToInt32(buff, position); position += sizeof(Int32); break; } case typeof(Int16): { value = (Int16)BitConverter.ToInt16(buff, position); position += sizeof(Int16); break; } […]

从基类C#调用子类方法

是否可以从基类引用中调用子类方法? 请建议…… 代码示例如下: public class Parent { public string Property1 { get; set; } } public class Child1:Parent { public string Child1Property { get; set; } } public class Child2 : Parent { public string Child2Property { get; set; } } public class Program { public void callMe() { Parent p1 = new Child1(); Parent […]

C#inheritance。 来自Base类的派生类

我有一个基类 public class A { public string s1; public string s2; } 我也有一个派生类: public class B : A { public string s3; } 假设我的程序创建了A类的实例。 A aClassInstance = new A(); 设置了一些参数: aClassInstance.s1 = “string 1”; aClassInstance.s2 = “string 2”; 此时我想创建一个B类实例。但是我希望B已经拥有了我的A类实例的值。 这不行:: public B bClassInstance = new B(): bClassInstance = (B)aClassInstance; 没有这个: 在A类中制作克隆方法 public B cloneA() { […]