多态可以用 1、virtul override 2、abstract override 3、interface 实现。 例子1using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace StudyCS {class Program{static void Main(string[] args){Persion LiLei = new Persion("lilei");Pig P1 = new Pig("pei qi");StudyPolymorphic[] tmp = { LiLei, P1 };for (int i = 0; i < tmp.Length; i++)tmp[i...
我正在尝试一个多态性示例,但我的代码中出现以下错误:public class CPolygon {CPolygon() {} public int width {get; set;} public int height {get; set;} public virtual int area(){ return 0; } }class CRectangle: CPolygon { public CRectangle() {} //'Lista.CPolygon.CPolygon()' is inaccessible due to its protection levelpublic override int area (){ return (width * height); } }class CTriangle: CPol...
什么是继承? class people { public string Name { get; set; } public int Age { get; set; } public char Sex { get; set; } } class Student:people {} 什么是多态? class People { public string Name { get; set; } public int Age { get; set; } public char Sex { get; set; } public virtual void Eat() { } } c...
在下面的代码中,请注意Bar来自Foo.class Program {public class Foo{public string data { get; set; }}public class Bar : Foo{}static void Main(string[] args){var bars = new List<Bar>();bars.Add(new Bar() { data = "hello" });bars.Add(new Bar() { data = "world" });var resultsA = GetFoos(bars, (b => b.data.StartsWith("h")));var resultsB = GetBars(bars, (b => b.data.StartsWith("h")));}static List<Foo> GetF...
可插拔框架 想象一个简单的可插拔系统,使用继承多态非常简单: >我们有一个图形渲染系统>有不同类型的图形形状(单色,彩色等)需要渲染>渲染由特定于数据的插件完成,例如, ColorRenderer将渲染ColorShape.>每个插件都实现了IRenderer,因此它们都可以存储在IRenderer []中.>启动时,IRenderer []会填充一系列特定的渲染器>当接收到新形状的数据时,基于形状的类型从阵列中选择插件.>然后通过调用其Render方法调用插件,将形状作为其基本类...
我有这样的代码:public interface INode {INode Parent { get; set; }// ...... }public interface ISpecificNode : INode {new ISpecificNode Parent { get; set; }// ...... }public class SpecificNode : ISpecificNode {ISpecificNode Parent { get; set; }// ...... }此代码提供编译错误,因为未实现INode.Parent.但是,我不需要重复的父属性.我该如何解决这个问题?解决方法:我想你正在寻找这样的东西:public interface INod...
我有一个名为:A的BL类,名为DTO的DTO类.现在假设我想在我的DTO中添加更多属性.所以我从现有的DTO中派生出一个新的DTO类,并为它添加属性.下面是代码:namespace TestConsole {class test{static void Main(string[] args){B b = new B();b.D.ID = 1;b.D.Name = "4";MyBLMethod(b);}static void MyBLMethod(A b){MyDALMethod(b.D);}static void MyDALMethod(DTO dto){int i = dto.ID;string name = ((MyDTO)dto).Name;//I could not ...
我有以下用于关闭流的代码.void CloseStream(Stream s) {if (s != null)s.Close(); }void CloseStream(HttpWebResponse s) {if (s != null)s.Close(); }void CloseStream(StreamReader s) {if (s != null)s.Close(); }代码完美无缺,但我想重构3种方法,如果可能的话.理想情况下,该方法看起来像这样:void CloseStream(Object obj) {obj.Close(); }但是我不能做obj.Close()因为Object类没有实现这样的方法.所以我想知道你们中是否有人...
我的问题是我想将一个json对象反序列化为一个C#对象,但诀窍是C#对象包含List<抽象类>而这个抽象类是另外10个类的超类.public sealed class SearchAPIResult {public string Status;public SearchAPIQuery Query;public SearchResults Result;public SearchAPIResult(){}public SearchAPIResult(string status){Status = status;} }和SearchAPIResult是:public sealed class SearchResults {public string TextAnswer;public List<...
我正在使用C#和WebAPI创建Rest API.我正在使用Swashbuckle向API和AutoRest添加Swagger UI以生成客户端.这一切都很好,直到我向我的模型引入多态/继承. Swagger UI仅为基类创建定义,这导致我的AutoRest客户端仅在接口中具有基类型. 我的模型是否需要属性以允许Swashbuckle / Swagger识别派生类型?解决方法:Swagger / OpenAPI规范确实支持多态性. 0700,如Swashbuckle versions feature comparision所述,动态生成Swagger文档,不支持5....
当我结合接口和多态时,我搞得一团糟. 说我有以下界面:public Interface CanSayHello {String SayHello(); }以下课程:public Class Person : CanSayHello {public String SayHello() { return "Hey, I'm a person just saying hello to you";} }最后是重要的班级:public Class PoshPerson: Person {public String SayHello() { return "Hey, I'm too posh to say hello to you";} }我的第一个问题是以下代码会收集PoshClass或Per...
我试图在ListBox中公开两个派生类型:OutFlight和InFlight都派生自Flight,它是一个抽象类型. MVVM说我必须为ListBox的绑定模型设置ViewModel.对于一种类型的曝光来说,这不是什么大问题,但我的列表框包含两种派生类型,我正在寻找最好的MVVM方法.这是否意味着我必须为每个派生类型设置继承的ViewModel?我已经读过某处ViewModel继承不被推荐……我确信这是一个非常常见的情况解决方法:您可以创建一个封装OutFlight和InFlight实体的通...
static void Main(string[] args){//抽象类例子:狗狗会叫,猫咪也会叫//实现多态,抽象类不能创建父类对象,所以只能指向子类//调用狗狗会叫的方法,创建一个子类对象赋值给父类Animal a = new Dog();//a虽然表现出来的是父类对象,但父类被子类重写了,所以最终输出的子类的方法//具体调哪个函数,取决于a装的是哪个子类的对象a.Bark(); ////调用猫咪会叫的方法//Animal a = new Cat();//a.Bark();Console.ReadKey();}//当父...
static void Main(string[] args){//多态概念:让一个对象能够表现出多种的状态(类型)//实现多态的3种手段:1、虚方法 2、抽象类 3、接口//以下例子用虚方法来实现:普通员工九点打卡,经理十点打卡,设计师不用打卡//创建普通员工对象,经理对象,设计师对象Employee emp = new Employee();Manager man = new Manager();Designer des = new Designer();//Employee[] emps = { emp, man, des };for (int i = 0; i < emps.Length; i+...
多态的本质:一个接口 不同实现 即多个功能 类别:静多态 动多态 一、静多态 函数的响应是在编译时发生的 主要包括函数重载和运算符重载两种 函数重载(overload) 同一作用域 方法名相同 参数列表必须不同 返回值类型可以不相同 其中参数列表不同包括参数类型不同或者参数个数不同 运算符会出新博客具体讲 二、动多态 函数的响应是在运行时发生的 动多态是由抽象类和虚方法实现 代码如下:class ShApe{protected int length;protec...