最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#基礎語法:Base關鍵字學習筆記

 更新時間:2015年06月18日 10:19:34   投稿:junjie  
這篇文章主要介紹了C#基礎語法:Base關鍵字學習筆記,本文講解了它的一些基礎知識以及測試代碼,需要的朋友可以參考下

它與this關鍵字一樣,都是作為類的實例(因此不能調用基類的靜態(tài)成員和抽象成員)簡寫或者替代而存在的,只不過this關鍵字用于替代本類的實例,base關鍵字用于替代基類的實例,用法很簡單,其訪問基類的形式如下: 

base.【標識符】

base[【表達式列表】]      這個類型的一看便可以大概猜測多用于基類實例的索引器操作,在我下面演示的代碼中你會看到它的用法。

對于  base.【標識符】的訪問形式再次說明一下:

對于非虛方法,這種訪問僅僅是對基類實例成員的直接訪問,完全等價于((base)this).【標識符】。

對于虛方法,對于這種訪子類重寫該虛方法運用這種訪問形式也是(禁用了虛方法調用的機制)對基類實例成員的直接訪問,將其看做非虛方法處理,此時則不等價于((base)this).【標識符】,因為這種格式完全遵守虛方法調用的機制,其聲明試時為積累類型,運行時為子類類型,所以執(zhí)行的還是子類的重寫方法。于未重寫的虛方法等同于簡單的非虛方法處理。

測試代碼如下:

using System;

namespace BaseTest
{
  class father
  {
    string str1 = "this field[1] of baseclass", str2 = "this field[2] of baseclass";
    public void F1() //Non-virtual method
    {
      Console.WriteLine(" F1 of the baseclass");
    }
    public virtual void F2()//virtual method
    {
      Console.WriteLine(" F2 of the baseclass");
    }
    public virtual void F3()
    {
      Console.WriteLine(" F3 of the baseclass that is not overrided "); 
    }
    public string this[int index]
    {
      set
      {
        if (index==1 )
        {
          str1 = value;
        }
        else
        {
          str2 = value;
        }
      }
      get
      {
        if (index ==1)
        {
          return str1;
        }
        else
        {
          return str2;
        }
      }
    }
  }
  class Child:father
  {
    public void G()
    {
      Console.WriteLine("======Non-virtual methods Test =========");
      base.F1();
      ((father)this).F1();
      Console.WriteLine("======virtual methods Test=========");
      base.F2();
      ((father)this).F2();
      base.F3();
      ((father)this).F3();
      Console.WriteLine("=====Test the type that the tbase [[expression]] ==========");
      Console.WriteLine(base[1]);
      base[1] = "override the default ";
      Console.WriteLine(base[1]);
      Console.WriteLine("================Test Over=====================");
    }
    public override void F2()
    {
      Console.WriteLine(" F2 of the subclass ");
    }
    
    static void Main(string[] args)
    {
      Child child=new Child();
      child.G();
      Console.ReadKey();
    }
  }
}


base用于構造函數聲明,用法和this用于構造函數聲明完全一致,但base是對基類構造函數形參的匹配。

 

using System;

namespace BaseCoTest
{
  class Base
  {
    public Base(int a, string str)
    {
      Console.WriteLine("Base. Base(int a,string str)");
    }
    public Base(int a)
    {
      Console.WriteLine("Base. Base(int a)");
    }
    public Base()
    {
    }
  }
  class Sub : Base
  {
    public Sub()
    {
    }
    public Sub(int a)
      : base(1, "123")
    {
      Console.WriteLine("Sub .Sub(int a)");
    }
    class Test
    {
      public static void Main()
      {
        Sub sub = new Sub(1);
        Console.ReadKey();
      }
    }
  }
}

相關文章

最新評論

沭阳县| 洮南市| 临猗县| 井研县| 葫芦岛市| 中卫市| 安远县| 桓台县| 阳信县| 罗定市| 潼南县| 丰宁| 台南市| 凌源市| 来安县| 沧源| 敦化市| 榆树市| 东乌| 兴海县| 瑞丽市| 西平县| 武川县| 日土县| 博罗县| 滨海县| 仁布县| 内黄县| 汉沽区| 宾阳县| 卢龙县| 西林县| 平陆县| 遂宁市| 天长市| 儋州市| 新乐市| 郎溪县| 囊谦县| 涡阳县| 巫山县|