定義
在 C# 語言中,類之間的繼承關系僅支持單重繼承,而介面是為了實作多重繼承關系設計的,一個類能同時實作多個介面,還能在實作介面的同時再繼承其他類,并且介面之間也可以繼承,無論是表示類之間的繼承還是類實作介面、介面之間的繼承,都使用“:”來表示,
介面定義了屬性、方法和事件,這些都是介面的成員,介面只包含了成員的宣告,成員的定義是派生類的責任,介面提供了派生類應遵循的標準結構,介面定義了語法合同 "是什么" 部分,派生類定義了語法合同 "怎么做" 部分,
定義介面語法:
interface 介面名稱
{
介面成員;
}
介面命名通常以 I 字母開頭,例如Itest,
介面成員,不允許使用 public、private、protected、internal 訪問修飾符,不允許使用 static、virtual、abstract、sealed 修飾符,不能定義欄位,定義的方法不能包含方法體,
示例:定義一本書的介面,有id、名稱name、定價price幾個屬性,和一個方法售賣價SalePrice(),
using System;
namespace app
{
interface IBook
{
int Id { get; set; }
string Name { get; set; }
double Price { get; set; }
double SalePrice(int discount);
}
}
實作
介面的實作與類的繼承語法格式類似,也是重寫了介面中的方法,讓其有了具體的實作內容,
實作介面語法:
class 類名 : 介面名
{
//類中的成員以及實作介面中的成員
}
在實作介面的成員時有兩種方式,隱式實作介面成員和顯式實作介面成員,隱式實作介面成員是將介面的所有成員以 public 訪問修飾符修飾,顯式實作介面是指在實作介面時所實作的成員名稱前含有介面名稱作為前綴,
下面對一本書的介面分別使用隱式實作和顯式實作,
隱式實作:
class Book:IBook
{
// 隱式的實作介面中的屬性
public int Id { get; set; }
public string Name { get; set; }
public double Price { get; set; }
// 隱式實作介面中的方法
public double SalePrice(int discount)
{
double salePrice = Price * discount * 0.1;
return salePrice;
}
}
隱式實作后進行運行:
class Program
{
static void Main(string[] args)
{
Book book = new Book();
book.Id = 1001;
book.Name = "tynam";
book.Price = 60;
Console.WriteLine("id:{0}" , book.Id);
Console.WriteLine("書名:{0}" , book.Name);
Console.WriteLine("定價:{0}", book.Price);
Console.WriteLine("售賣價:{0}", book.SalePrice(8));
}
}
運行后結果:
id:1001 書名:tynam 定價:60 售賣價:48
顯式實作:
class Book:IBook
{
public double Price { get; set; }
// 顯示的實作介面中的屬性
int IBook.Id { get; set; }
string IBook.Name { get; set; }
// 顯式實作介面中的方法
double IBook.SalePrice(int discount)
{
double salePrice = Price * discount * 0.1;
return salePrice;
}
}
顯式實作后進行運行:
class Program
{
static void Main(string[] args)
{
Book book = new Book();
IBook bookDetail = book;
bookDetail.Id = 1001;
bookDetail.Name = "tynam";
bookDetail.Price = 60;
Console.WriteLine("id:{0}" , bookDetail.Id);
Console.WriteLine("書名:{0}" , bookDetail.Name);
Console.WriteLine("定價:{0}", bookDetail.Price);
Console.WriteLine("售賣價:{0}", bookDetail.SalePrice(8));
}
}
運行后結果:
id:1001 書名:tynam 定價:60 售賣價:48
注意:介面無法直接進行實體化, 其成員由實作介面的任何類或結構來實作,
多型
使用介面實作多型 需要滿足以下兩個條件,
定義介面并使用類實作了介面中的成員,
創建介面的實體指向不同的實作類物件,
示例:定義一個介面名稱為 IBird,分別定義兩個實作類 Phoenix 和 Duck 來實作介面的成員,代碼如下,
interface IBird
{
void fly();
}
class Phoenix : IBird
{
public void fly()
{
Console.WriteLine("鳳凰會飛");
}
}
class Duck : IBird
{
public void fly()
{
Console.WriteLine("鴨子也會飛");
}
}
實體化后執行:
class Program
{
static void Main(string[] args)
{
IBird phoenix = new Phoenix();
phoenix.fly();
IBird duck = new Duck();
duck.fly();
}
}
執行結果:
鳳凰會飛 鴨子也會飛
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/23.html
標籤:C#
