C#中的 接口与类
在C#中类的声明与C++和Java很相似。但是,不像C++,C#结构体与类是不支持继承多个父类。但是,与Java相同的是,一个结构体可以实现接口(interface)。Java的关键字import已经被替换成using,它起到了同样的作用。
类的介绍在此不过多的说明,简要的说明一下接口。
接口用来定义类的标准和规范,是一种约束形式。主要的目的是为不相关的类提供通用的处理服务,由于C#中只允许单一继承,即一个类只能有一个父类,所以接口是让一个类具有两个及以上基类的唯一方式。接口可以从多个基接口继承,接口可以包含方法、属性、事件和索引器申明,接口本身不提供它所定义的成员的实现,这也是接口为什么不包含字段成员变量的原因。
定义接口的语法格式是:
[访问修饰符] interface 接口名称 [基接口]
{
//接口体
}
实现接口具体实例如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hello
{
//定义两个接口
interface IMyexample1
{
int add(int x,int y);
}
interface IMyexample2
{
string Point { get; set; }
}
class mytest:IMyexample1,IMyexample2
{ //类继承于多个接口
private string mystr;
public mytest(string s)
{
mystr = s;
}
//实现接口IMyexample1中的方法 dd(int x,int y)
public int add(int x,int y)
{
return x + y;
}
//实现接口IMyexample2中的方法Point { get; set; }
public string Point
{
get { return mystr; }
set { mystr = value; }
}
}
class Program
{
static void Main(string[] args)
{
mytest a = new mytest("Hello");
Console.WriteLine(a.add(23,4));
Console.WriteLine(a.Point);
Console.Read();
}
}
}
运行结果为 27
Hello
此外,不同点:
不能直接实例化接口。
接口不包含方法的实现。
接口可以多继承,类只能单继承。
类定义可在不同的源文件之间进行拆分。
相同点:
接口、类和结构都可以从多个接口继承。
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
接口和类都可以包含事件、索引器、方法和属性。
显示接口成员实现
当类实现接口时,如给出了接口成员的完整名称即带有接口名前缀,则称这样实现的成员为显示接口成员,其实现被称为显示接口成员实现。
显示成员实现中使用访问修饰符属于编译错误,即不能包含public、abstract、virtual、override或static等修饰符
显示接口成员实现具有与其他成员不同的可访问性特征,不能直接访问“显示接口成员实现”成员,即使使用它的完全限定名也不行。“显示接口成员实现”的成员只能通过接口的实例访问,并在通过接口的实例访问时,只能用该接口成员的简单名称来引用。
接口成员显示实现示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hello
{
interface Ia //申明接口Ia
{
float getarea(); //接口成员声明
}
public class Rectangle: Ia //类Rectangle继承接口Ia
{
float x, y;
public Rectangle(float x1,float y1) //构造函数
{
x = x1;
y = y1;
}
float Ia.getarea() //显示接口成员实现,带有接口名前缀,不能使用public
{
return x * y;
}
}
class Program
{
static void Main(string[] args)
{
Rectangle box1 = new Rectangle(2.5f,3.0f);
Ia ia = (Ia)box1;
Console.WriteLine("长方形面积:{0}",ia.getarea());
}
}
}
运行结果
长方形面积:7.5