【48.C#--多态之虚方法】教程文章相关的互联网学习教程文章

[C#]多态

多态可以用 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...

C#多态性错误:由于其保护级别而无法访问【代码】

我正在尝试一个多态性示例,但我的代码中出现以下错误: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...

C#继承多态

什么是继承? 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...

c# – 关于多态类的Lambdas【代码】

在下面的代码中,请注意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...

c# – 与泛型的多态性 – 奇怪的行为【代码】

可插拔框架 想象一个简单的可插拔系统,使用继承多态非常简单: >我们有一个图形渲染系统>有不同类型的图形形状(单色,彩色等)需要渲染>渲染由特定于数据的插件完成,例如, ColorRenderer将渲染ColorShape.>每个插件都实现了IRenderer,因此它们都可以存储在IRenderer []中.>启动时,IRenderer []会填充一系列特定的渲染器>当接收到新形状的数据时,基于形状的类型从阵列中选择插件.>然后通过调用其Render方法调用插件,将形状作为其基本类...

C#中的接口多态性【代码】

我有这样的代码: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...

C#多态性问题【代码】

我有一个名为: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 ...

C#通用方法/多态性【代码】

我有以下用于关闭流的代码.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类没有实现这样的方法.所以我想知道你们中是否有人...

不使用typeNameHandling将Json对象反序列化为多态C#对象【代码】

我的问题是我想将一个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# – SwaggerUI和Swashbuckle识别多态/派生类型

我正在使用C#和WebAPI创建Rest API.我正在使用Swashbuckle向API和AutoRest添加Swagger UI以生成客户端.这一切都很好,直到我向我的模型引入多态/继承. Swagger UI仅为基类创建定义,这导致我的AutoRest客户端仅在接口中具有基类型. 我的模型是否需要属性以允许Swashbuckle / Swagger识别派生类型?解决方法:Swagger / OpenAPI规范确实支持多态性. 0700,如Swashbuckle versions feature comparision所述,动态生成Swagger文档,不支持5....

C#接口,多态性和代理【代码】

当我结合接口和多态时,我搞得一团糟. 说我有以下界面: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...

c# – MVVM – 具有多态性的集合【代码】

我试图在ListBox中公开两个派生类型:OutFlight和InFlight都派生自Flight,它是一个抽象类型. MVVM说我必须为ListBox的绑定模型设置ViewModel.对于一种类型的曝光来说,这不是什么大问题,但我的列表框包含两种派生类型,我正在寻找最好的MVVM方法.这是否意味着我必须为每个派生类型设置继承的ViewModel?我已经读过某处ViewModel继承不被推荐……我确信这是一个非常常见的情况解决方法:您可以创建一个封装OutFlight和InFlight实体的通...

49.C#--多态之抽象类【代码】

static void Main(string[] args){//抽象类例子:狗狗会叫,猫咪也会叫//实现多态,抽象类不能创建父类对象,所以只能指向子类//调用狗狗会叫的方法,创建一个子类对象赋值给父类Animal a = new Dog();//a虽然表现出来的是父类对象,但父类被子类重写了,所以最终输出的子类的方法//具体调哪个函数,取决于a装的是哪个子类的对象a.Bark(); ////调用猫咪会叫的方法//Animal a = new Cat();//a.Bark();Console.ReadKey();}//当父...

48.C#--多态之虚方法

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+...

C#静多态与动多态

多态的本质:一个接口 不同实现 即多个功能 类别:静多态 动多态 一、静多态 函数的响应是在编译时发生的 主要包括函数重载和运算符重载两种 函数重载(overload) 同一作用域 方法名相同 参数列表必须不同 返回值类型可以不相同 其中参数列表不同包括参数类型不同或者参数个数不同 运算符会出新博客具体讲 二、动多态 函数的响应是在运行时发生的 动多态是由抽象类和虚方法实现 代码如下:class ShApe{protected int length;protec...