zoukankan      html  css  js  c++  java
  • C#語法學習虛方法(virtual)

    /*
     * Created by SharpDevelop.
     * User: Administrator
     * Date: 2008/9/3
     * Time: 上午 10:20
     * 虛方法(virtual)
     * virtual關鍵字用於修飾方法,屬性,索引器或是事件聲明
     * 並且允許在派生類中重寫這些對像.
     * 
     * 
     * 
     * To change this template use Tools | Options | Coding | Edit Standard Headers.
     
    */

    using System;
    class A
    {
        
    public void F()
        {
            Console.WriteLine(
    "A.F");
        }
    }
    class B:A
    {
        
    public new void F()
        {
            Console.WriteLine(
    "B.F");
        }
    }
    class Test
    {
        
    static void Main()
        {
            B b
    =new B();//由於b繼承自A,所以在b內有兩個方法F
            A a=b;//這里進行了一次隱式轉換,轉換成了A對像.
            a.F();//a的指針是指向b對像中所包含的A.F()方法.
            b.F();
        }
    }
    /*
     * Created by SharpDevelop.
     * User: Administrator
     * Date: 2008/9/3
     * Time: 上午 10:20
     * 虛方法(virtual)
     * virtual關鍵字用於修飾方法,屬性,索引器或是事件聲明
     * 並且允許在派生類中重寫這些對像.
     * 
     * 
     * 
     * To change this template use Tools | Options | Coding | Edit Standard Headers.
     
    */

    using System;
    class A
    {
        
    //virtual && override是成對出現的
        
    //virtual定議一個虛方法
        
    //override覆蓋一個虛方法
        
    //這里就形成了面向對像的一個很重要的特性:多態
        
    //多態是指兩個或是多個屬於不同類的對像
        
    //對同一個消息做出不同的響應的能力
        public virtual void F()
        {
            Console.WriteLine(
    "A.F");
        }
    }
    class B:A
    {
        
    public override void F()
        {
            Console.WriteLine(
    "B.F");
        }
    }
    class Test
    {
        
    static void Main()
        {
            B b
    =new B();//由於b繼承自A,所以在b內有兩個方法F
            A a=b;//這里進行了一次隱式轉換,轉換成了A對像.
            a.F();//此處因為使用了virtual,所以輸出結果也是為B.F;
            b.F();
        }
    }
    /*
     * Created by SharpDevelop.
     * User: Administrator
     * Date: 2008/9/3
     * Time: 上午 10:20
     * 虛方法(virtual)
     * virtual關鍵字用於修飾方法,屬性,索引器或是事件聲明
     * 並且允許在派生類中重寫這些對像.
     * 
     * 
     * 
     * To change this template use Tools | Options | Coding | Edit Standard Headers.
     
    */

    using System;
    class A
    {
        
    //virtual && override是成對出現的
        
    //virtual定議一個虛方法
        
    //override覆蓋一個虛方法
        
    //這里就形成了面向對像的一個很重要的特性:多態
        
    //多態是指兩個或是多個屬於不同類的對像
        
    //對同一個消息做出不同的響應的能力
        public virtual void F()
        {
            Console.WriteLine(
    "A.F");
        }
    }
    class B:A
    {
        
    public override void F()
        {
            Console.WriteLine(
    "B.F");
        }
    }
    class C:B
    {
        
    public override void F()
        {
            Console.WriteLine(
    "C.F");
        }
    }
    class Test
    {
        
    static void Main()
        {
            C c
    =new C();
            A a
    =c;
            B b
    =c;
            a.F();
            b.F();
            c.F();
    //類C此時覆蓋了A,B的f方法
        }
    }
    /*
     * Created by SharpDevelop.
     * User: Administrator
     * Date: 2008/9/3
     * Time: 上午 10:41
     * 通常情況下子類中都會調用父類的方法.
     * To change this template use Tools | Options | Coding | Edit Standard Headers.
     
    */

    using System;
    class Employee
    {
        
    protected string _name;
        
    public Employee(){}
        
    public Employee(string name)
        {
            
    this._name=name;
        }
        
    public virtual void StartWork()
        {
            Console.Write(
    this._name + "開始工作:");
        }
    }
    class Manager : Employee
    {
        
    public Manager(string name):base(name){}
        
    public override void StartWork()
        {
            
    base.StartWork();//在子類中調用父類的方法
            Console.WriteLine("給員工下達任務");
        }
    }
    class Secretary : Employee
    {
        
    public Secretary(string name):base(name){}
        
    public override void StartWork()
        {
            
    base.StartWork();//在子類中調用父類的方法
            Console.WriteLine("協助經理");
        }
    }

    class Seller : Employee
    {
        
    public Seller(string name):base(name){}
        
    public override void StartWork()
        {
            
    base.StartWork();//在子類中調用父類的方法
            Console.WriteLine("銷售產品");
        }
    }
    //新增員工時只需要再新增一個類繼承自Employee
    class Accountant : Employee
    {
        
    public Accountant(string name):base(name){}
        
    public override void StartWork()
        {
            
    base.StartWork();//在子類中調用父類的方法
            Console.WriteLine("管理公司財政");
        }
    }
    class Test
    {
        
    static void Main()
        {
            Employee[] emp
    =new Employee[5];
            emp[
    0]=new Manager("經理張三");
            emp[
    1]=new Secretary("助理李四");
            emp[
    2]=new Seller("王五");
            emp[
    3]=new Seller("馬六");
            emp[
    4]=new Accountant("錢七");
            Console.WriteLine(
    "早上八點,開始工作.");
            
    foreach(Employee e in emp)
            {
                e.StartWork();
            }
        }
    }

    /*
     * Created by SharpDevelop.
     * User: Administrator
     * Date: 2008/9/4
     * Time: 下午 04:35
     * 這里說明了用
     * virtual && override 
     * virtual && new
     * 這兩種組合的不成結果.
     * 
     * 如果一個類的成員方法是虛方法,其子類可以使用override來覆蓋基類的虛方法
     * 也可以用new來重建一個新的方法.這二者的不同是,用override會把基類的方法
     * 完全覆蓋也就是最後不會有基類的方法存在了.而用new則不會把基類的方法覆蓋
     * ,此時還是可以調用到基類的方法.
     * 
     
    */
     
    using System;
     
    public class A
     {
         
    public virtual void SetStr()
         {
             Console.WriteLine(
    "AAA");
         }
     }
     
    public class B:A
     {
         
    public override void SetStr()
         {
             Console.WriteLine(
    "BBB");
         }
     }
     
    public class C:A
     {
         
    public new void SetStr()
         {
             Console.WriteLine(
    "CCC");
         }
     }
     
    class Test
     {
         
    static void Main()
         {
             
    //A a=new A();
             
    //a.SetStr();
             
    //AAA
             
             
    //A a=new B();
             
    //a.SetStr();
             
    //BBB
             
             A a
    =new C();
             a.SetStr();
             
    //AAA,這里實際上執行的是基類A的方法
             
             
    //B b=new B();
             
    //b.SetStr();
             
    //BBB
             
             
    //C c=new C();
             
    //c.SetStr();
             
    //CCC
             
         }
     }

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    MySQL-基本sql命令
    Java for LeetCode 203 Remove Linked List Elements
    Java for LeetCode 202 Happy Number
    Java for LeetCode 201 Bitwise AND of Numbers Range
    Java for LeetCode 200 Number of Islands
    Java for LeetCode 199 Binary Tree Right Side View
    Java for LeetCode 198 House Robber
    Java for LeetCode 191 Number of 1 Bits
    Java for LeetCode 190 Reverse Bits
    Java for LeetCode 189 Rotate Array
  • 原文地址:https://www.cnblogs.com/Athrun/p/1282726.html
Copyright © 2011-2022 走看看