哪吒2之魔童闹海|哪吒2之魔童归来免费观看|哪吒2在线观看|哪吒2魔童闹海电影免费观看|哪吒2免费观看完整版大电影|哪吒1免费观看完整版

新疆軟件開(kāi)發(fā)

本站首頁(yè) 軟件開(kāi)發(fā) 成功案例 公司新聞 公司簡(jiǎn)介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開(kāi)發(fā)公司 >> .Net技術(shù) >> 文章正文

C#abstact interface 學(xué)習(xí)

interface用來(lái)聲明接口
1.只提供一些方法規(guī)約,不提供方法主體
  如
  public interface IPerson
 {
  void getName();//不包含方法主體
  }
2.方法不能用public abstract等修飾,無(wú)字段變量,無(wú)構(gòu)造函數(shù)。
3.方法可包含參數(shù)
  如 
  public interface IPerson
  {
   void getAge(string s);
  }

  一個(gè)例子(例1):
  public interface IPerson
  {
   IPerson();              //錯(cuò)誤
   string name;            //錯(cuò)誤
   public void getIDcard();//錯(cuò)誤

   void getName();         //right
   void getAge(string s);  //right
   }

實(shí)現(xiàn)interface的類(lèi)
1.與繼承類(lèi)的格式一致,如 public class Chinese:IPerson{}
2.必須實(shí)現(xiàn)interface中的各個(gè)方法

   例2,繼承例1
    public class Chinese:IPerson
  {
   public Chinese(){}             //添加構(gòu)造
   public void getName(){}        //實(shí)現(xiàn)getName()
   public void getAge(string s){} //實(shí)現(xiàn)getAge()
   }

abstract聲明抽象類(lèi)、抽象方法
1.抽象方法所在類(lèi)必須為抽象類(lèi)
2.抽象類(lèi)不能直接實(shí)例化,必須由其派生類(lèi)實(shí)現(xiàn)。
3.抽象方法不包含方法主體,必須由派生類(lèi)以override方式實(shí)現(xiàn)此方法,這點(diǎn)跟interface中的方法類(lèi)似

  如
  public abstract class Book
 {
   public Book()
   {   
      }

  public abstract void getPrice();      //抽象方法,不含主體
        public virtual void getName()   //虛方法,可覆蓋
        {
        Console.WriteLine("this is a test:virtual getName()");
        }
        public virtual void getContent()   //虛方法,可覆蓋
        {
        Console.WriteLine("this is a test:virtual getContent()");
        }
  public void getDate()                           //一般方法,若在派生類(lèi)中重寫(xiě),須使用new關(guān)鍵字
        {
        Console.WriteLine("this is a test: void getDate()");
        }
  }

  public class JavaBook:Book
  {
       public override void getPrice()   //實(shí)現(xiàn)抽象方法,必須實(shí)現(xiàn)
       {
    Console.WriteLine("this is a test:JavaBook override abstract getPrice()");
   }
       public override void getName()   //覆蓋原方法,不是必須的
       {
    Console.WriteLine("this is a test:JavaBook override virtual getName()");
   }
  }

 測(cè)試如下:
 public class test
  {
   public test()
   {
    JavaBook jbook=new JavaBook();
    jbook.getPrice();      //將調(diào)用JavaBook中g(shù)etPrice()
    jbook.getName();       //將調(diào)用JavaBook中g(shù)etName()
    jbook.getContent();    //將調(diào)用Book中g(shù)etContent()
    jbook.getDate();       //將調(diào)用Book中g(shù)etDate()
    
   }
   public static void Main()
   {test t=new test();
   }
  }

virtual標(biāo)記方法為虛方法
1.可在派生類(lèi)中以override覆蓋此方法
2.不覆蓋也可由對(duì)象調(diào)用
3.無(wú)此標(biāo)記的方法(也無(wú)其他標(biāo)記),重寫(xiě)時(shí)需用new隱藏原方法
virtual 關(guān)鍵字用于修飾方法、屬性、索引器或事件聲明,并且允許在派生類(lèi)中重寫(xiě)這些對(duì)象。例如,此方法可被任何繼承它的類(lèi)重寫(xiě)。
public virtual double Area() 
{
    return x * y;
}

虛擬成員的實(shí)現(xiàn)可由派生類(lèi)中的重寫(xiě)成員更改。有關(guān)使用 virtual 關(guān)鍵字的更多信息,請(qǐng)參見(jiàn)使用 Override 和 New 關(guān)鍵字進(jìn)行版本控制(C# 編程指南) 和了解何時(shí)使用 Override 和 New 關(guān)鍵字(C# 編程指南)。

調(diào)用虛方法時(shí),將為重寫(xiě)成員檢查該對(duì)象的運(yùn)行時(shí)類(lèi)型。將調(diào)用大部分派生類(lèi)中的該重寫(xiě)成員,如果沒(méi)有派生類(lèi)重寫(xiě)該成員,則它可能是原始成員。

默認(rèn)情況下,方法是非虛擬的。不能重寫(xiě)非虛方法。

virtual 修飾符不能與 static、abstract, private 或 override 修飾符一起使用。

除了聲明和調(diào)用語(yǔ)法不同外,虛擬屬性的行為與抽象方法一樣。

在靜態(tài)屬性上使用 virtual 修飾符是錯(cuò)誤的。

通過(guò)包括使用 override 修飾符的屬性聲明,可在派生類(lèi)中重寫(xiě)虛擬繼承屬性

abstract與virtual: 方法重寫(xiě)時(shí)都使用 override 關(guān)鍵字
interface中的方法和abstract方法都要求實(shí)現(xiàn)


new 修飾符(C# 參考)

在用作修飾符時(shí),new 關(guān)鍵字可以顯式隱藏從基類(lèi)繼承的成員。隱藏繼承的成員意味著該成員的派生版本將替換基類(lèi)版本。在不使用 new 修飾符的情況下隱藏成員是允許的,但會(huì)生成警告。使用 new 顯式隱藏成員會(huì)取消此警告,并記錄代之以派生版本這一事實(shí)。

若要隱藏繼承的成員,請(qǐng)使用相同名稱(chēng)在派生類(lèi)中聲明該成員,并使用 new 修飾符修飾該成員。例如:

 復(fù)制代碼
public class BaseC 
{
    public int x;
    public void Invoke() {}
}
public class DerivedC : BaseC
{
    new public void Invoke() {}
 
    在這個(gè)示例中,DerivedC.Invoke 隱藏了 BaseC.Invoke。
字段 x 不受影響,因?yàn)樗鼪](méi)有被類(lèi)似名稱(chēng)的字段隱藏。 
通過(guò)繼承隱藏名稱(chēng)采用下列形式之一:
引入類(lèi)或結(jié)構(gòu)中的常數(shù)、指定、屬性或類(lèi)型隱藏具有相同名稱(chēng)的所有基類(lèi)成員。
引入類(lèi)或結(jié)構(gòu)中的方法隱藏基類(lèi)中具有相同名稱(chēng)的屬性、字段和類(lèi)型。同時(shí)也隱藏具有相同簽名的所有基類(lèi)方法。
引入類(lèi)或結(jié)構(gòu)中的索引器將隱藏具有相同名稱(chēng)的所有基類(lèi)索引器。

對(duì)同一成員同時(shí)使用 new 和 override 是錯(cuò)誤的,因?yàn)檫@兩個(gè)修飾符在含義上相互排斥。使用 new 會(huì)用同樣的名稱(chēng)創(chuàng)建一個(gè)新成員并使原始成員變?yōu)殡[藏的,而 override 則擴(kuò)展繼承成員的實(shí)現(xiàn)。
在不隱藏繼承成員的聲明中使用 new 修飾符將會(huì)生成警告。

 示例 
在該例中,基類(lèi) BaseC 和派生類(lèi) DerivedC 使用相同的字段名 x,從而隱藏了繼承字段的值。該示例演示了 new 修飾符的用法。另外還演示了如何使用完全限定名訪問(wèn)基類(lèi)的隱藏成員。
 復(fù)制代碼
// cs_modifier_new.cs
// The new modifier.
using System;
public class BaseC 
{
    public static int x = 55;
    public static int y = 22;
}

public class DerivedC : BaseC 
{
    // Hide field ’x’
    new public static int x = 100;

    static void Main() 
    {
        // Display the new value of x:
        Console.WriteLine(x);
        // Display the hidden value of x:
        Console.WriteLine(BaseC.x);
        // Display the unhidden member y:
        Console.WriteLine(y);
    }
}

輸出
100
55
22
在此示例中,嵌套類(lèi)隱藏了基類(lèi)中具有相同名稱(chēng)的類(lèi)。該示例不僅演示了如何使用 new 修飾符來(lái)消除警告消息,而且還演示了如何使用完全限定名來(lái)訪問(wèn)隱藏的類(lèi)成員。

 復(fù)制代碼
// cs_modifer_new_nested.cs
// Using the new modifier with nested types.
using System;
public class BaseC 
{
    public class NestedC 
    {
        public int x = 200;
        public int y;
    }
}

public class DerivedC : BaseC 
{
    // Nested type hiding the base type members.
    new public class NestedC   
    {
        public int x = 100;
        public int y; 
        public int z;
    }

    static void Main() 
    {
        // Creating an object from the overlapping class:
        NestedC c1  = new NestedC();

        // Creating an object from the hidden class:
        BaseC.NestedC c2 = new BaseC.NestedC();

        Console.WriteLine(c1.x);
        Console.WriteLine(c2.x);   
    }
}
as(C# 參考)
用于在兼容的引用類(lèi)型之間執(zhí)行轉(zhuǎn)換。例如:
 復(fù)制代碼
string s = someObject as string;
if (s != null)
{
    // someObject is a string.
}
 備注 
as 運(yùn)算符類(lèi)似于強(qiáng)制轉(zhuǎn)換操作;但是,如果轉(zhuǎn)換不可行,as 會(huì)返回 null 而不是引發(fā)異常。更嚴(yán)格地說(shuō),這種形式的表達(dá)式
 復(fù)制代碼
expression as type
等效于
 復(fù)制代碼
expression is type ? (type)expression : (type)null
只是 expression 只被計(jì)算一次。
注意,as 運(yùn)算符只執(zhí)行引用轉(zhuǎn)換和裝箱轉(zhuǎn)換。as 運(yùn)算符無(wú)法執(zhí)行其他轉(zhuǎn)換,如用戶(hù)定義的轉(zhuǎn)換,這類(lèi)轉(zhuǎn)換應(yīng)使用 cast 表達(dá)式來(lái)執(zhí)行。
 示例 
 復(fù)制代碼
// cs_keyword_as.cs
// The as operator.
using System;
class Class1
{
}
class Class2
{
}
class MainClass
{
    static void Main()
    {
        object[] objArray = new object[6];
        objArray[0] = new Class1();
        objArray[1] = new Class2();
        objArray[2] = "hello";
        objArray[3] = 123;
        objArray[4] = 123.4;
        objArray[5] = null;

        for (int i = 0; i < objArray.Length; ++i)
        {
            string s = objArray[i] as string;
            Console.Write("{0}:", i);
            if (s != null)
            {
                Console.WriteLine("’" + s + "’");
            }
            else
            {
                Console.WriteLine("not a string");
            }
        }
    }
}
is
如果所提供的表達(dá)式非空,并且所提供的對(duì)象可以強(qiáng)制轉(zhuǎn)換為所提供的類(lèi)型而不會(huì)導(dǎo)致引發(fā)異常,則 is 表達(dá)式的計(jì)算結(jié)果將是 true。有關(guān)更多信息,請(qǐng)參見(jiàn) 7.6.6 強(qiáng)制轉(zhuǎn)換表達(dá)式。

如果已知表達(dá)式將始終是 true 或始終是 false,則 is 關(guān)鍵字將導(dǎo)致編譯時(shí)警告,但是,通常在運(yùn)行時(shí)才計(jì)算類(lèi)型兼容性。

不能重載 is 運(yùn)算符。

請(qǐng)注意,is 運(yùn)算符只考慮引用轉(zhuǎn)換、裝箱轉(zhuǎn)換和取消裝箱轉(zhuǎn)換。不考慮其他轉(zhuǎn)換,如用戶(hù)定義的轉(zhuǎn)換
// cs_keyword_is.cs
// The is operator.
using System;
class Class1
{
}
class Class2
{
}
class IsTest
{
    static void Test(object o)
    {
        Class1 a;
        Class2 b;

        if (o is Class1)
        {
            Console.WriteLine("o is Class1");
            a = (Class1)o;
            // Do something with "a."
        }
        else if (o is Class2)
        {
            Console.WriteLine("o is Class2");
            b = (Class2)o;
            // Do something with "b."
        }
        else
        {
            Console.WriteLine("o is neither Class1 nor Class2.");
        }
    }
    static void Main()
    {
        Class1 c1 = new Class1();
        Class2 c2 = new Class2();
        Test(c1);
        Test(c2);
        Test("a string");
    }
}

 

作者:未知 | 文章來(lái)源:未知 | 更新時(shí)間:2008-1-15 16:43:48

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    C#實(shí)現(xiàn)短信發(fā)送程序的例子
    .net學(xué)習(xí):c#事件的深入分析
    基礎(chǔ)學(xué)習(xí):java中使用存儲(chǔ)過(guò)程
    C#如何設(shè)置或者獲取目錄的權(quán)限?
    解析c#語(yǔ)言和java語(yǔ)言最相似的地方
    C#中如何才能調(diào)用QTP自動(dòng)化對(duì)象
    C#如何轉(zhuǎn)換AVI文件為BMP位圖文件
    c#如何連接各類(lèi)數(shù)據(jù)庫(kù)
    c#中的interface abstract與virtual學(xué)習(xí)
    C++函數(shù)對(duì)象count_if
    軟件技術(shù)
    · 開(kāi)發(fā)語(yǔ)言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫(kù)開(kāi)發(fā)
    最新文章  
    ·.net技術(shù) asp.net MVC3 Vi
    ·.net將視頻文件格式轉(zhuǎn)換成
    ·NET Framework 2.0 Servic
    ·如何動(dòng)態(tài)修改winform的app
    ·asp,net軟件結(jié)構(gòu)設(shè)計(jì)和相關(guān)
    ·學(xué)習(xí)怎樣使用ASP.NET中的虛
    ·,net基礎(chǔ)類(lèi)的學(xué)習(xí):system
    ·.net學(xué)習(xí):c#事件的深入分
    ·Facade Pattern學(xué)習(xí)總結(jié)
    ·C#如何設(shè)置或者獲取目錄的
    ·如何使用XSL來(lái)定義ASP.NET
    ·理解WCF Data Contract契約
    ·如何能在.net2.0開(kāi)發(fā)的控件
    ·模式怎樣使用,講解模式的
    ·如何解決Menu菜單被frame遮
    關(guān)于我們 | 軟件開(kāi)發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開(kāi)發(fā)網(wǎng) www.pg11qqq.com All Rights Reserved 新ICP備14003571號(hào)
    新疆軟件開(kāi)發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000