標籤:override 必須 ring span 抽象方法 style private object 修飾符
直接看代碼吧
using System;using static System.Console;namespace ConsoleApp{ //使用abstract,抽象類別或方法,不能使用virtual,衍生類別必須實現所有抽象方法 abstract class Shape { public int Size { get; set; } public virtual void Draw() { WriteLine("shap"); } } //密封類(方法),就不能派生(重寫) string類為密封的 sealed class Rect: Shape { public override void Draw() { WriteLine("rect"); //base.Draw(); } } //介面 相當於抽象類別 //不能聲明成員的修飾符,成員總是public,不能聲明為virtual //介面也可以彼此繼承,從而添加新的聲明 public interface IMyInterface { //可以包含方法、屬性、索引器和事件的聲明,不能實現 void Draw(); int Size { get; set; } } //繼承介面的類必須實現介面的所有東西 class A : IMyInterface { public void Draw() { WriteLine(‘A‘); } private int _size; public int Size { get { return _size; } set { _size = value; } } } class B : IMyInterface { public void Draw() { WriteLine(‘B‘); } private int _size; public int Size { get { return _size; } set { _size = value; } } } class Program { public void as_is(object o) { //1 ,如果該object類型不對就會引發InvalidCastException異常 IMyInterface myinterface = (IMyInterface)o; myinterface.Draw(); //2 as IMyInterface myinterface1 = o as IMyInterface; if (myinterface1 != null) { myinterface1.Draw(); } //3 is if (o is IMyInterface) { IMyInterface myinterface2 = (IMyInterface)o; myinterface2.Draw(); } } static void Main(string[] args) { Shape s = new Rect(); s.Draw(); //介面可以引用任何實現該介面的類 IMyInterface a = new A(); IMyInterface b = new B(); a.Draw(); b.Draw(); } }}
C#多態及介面學習