您的位置:首页 > 编程语言 > C#

C# 抽象类和接口

2016-08-03 17:50 183 查看
在介绍抽象类和接口之前,首先介绍一下访问修饰符

public:公共的,没有任何限制,所有代码都可以访问

private:私有的,只有类内部可以访问

protected:受保护的,只有本类或派生类中可以访问

internal:当前程序集中任何代码都能访问

protected internal:当前程序集中的派生类或本类可以访问

static:静态的,作用于类,不作用于类的实例,通过类名进行访问

new::创建对象,分配内存。隐藏基类同名成员,泛型约束

const:用户标识常量,常量默认都是static类型

redonly:只读的。

extern:扩展的,成员在外部用另一种语言实现。

sealed:密封的,密封类表示类不能被继承

virtual:虚方法,子类可以重写基类的方法

override:子类重写基类方法所用的关键字

abstract:抽象的,子类可以重写。抽象方法没有实现。

抽象类

抽象类的概念:

抽象类,是类的一个抽象体,使用abstract关键字标识。抽象类可以有实例方法,也可以有抽象方法。但是,有抽象方法的类一定是抽象类,抽象类不能被实例化。

类默认的访问修饰符是internal。当前程序集可以访问。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication21
{
class Program
{
static void Main(string[] args)
{
BaseClass bc = new DerviedClass();
bc.printf();
}
}
abstract class BaseClass
{
public abstract void printf();
protected void Func()
{
Console.WriteLine("BaseClass.Func.");
}
}
class DerviedClass : BaseClass
{
public override void printf()
{
base.Func();
Console.WriteLine("DerviedClass.printf.");
}
}
}


上述代码为抽象类和抽象方法的定义和使用,总结几个抽象类的特点:

采用abstract标识的类是抽象类,采用abstract标识的方法是抽象方法

任何类如果不显示指定访问修饰符默认都是internal

抽象方法必须指定访问修饰符,因为默认,类中方法都是private,这对抽象方法来说没有意义,抽象方法必须要子类实现。

抽象方法没有方法体

抽象类中可以有实例方法。

抽象类不能被实例化

抽象类异是类,是类就只能单继承

接口

接口的概念:

接口是包含一组函数型方法的数据结构,是抽象的。用interface关键字修饰,接口默认访问修饰符是internal。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication21
{
class Program
{
static void Main(string[] args)
{
IBase bc = new DerviedClass();
bc.printf();
}
}
interface IBase
{
void printf();
}
class DerviedClass : IBase
{

public void printf()
{
Console.WriteLine("DerviedClass.printf.");
}
}
}


上述代码为接口的定义和使用,特点:

使用关键字interface,默认访问修饰符是internal。

接口中的方法不能有访问修饰符,默认都是public

接口不能包含实例方法

接口中的方法没有方法体

接口不能被实例化

接口支持多继承

接口和抽象类的区别

经过抽象类和接口的特点,总结出两者的区别:

相同点:

1. 子类必须实现其未实现的方法

2. 都不能被实例化

3. 接口和抽象类默认访问修饰符都是internal

不同点:

1. 关键字不同,抽象类使用abstract,接口使用interface

2. 接口不能包含实例方法,抽象类可以

3. 接口支持多继承,抽象类只能单继承

4. 接口中的方法不能有访问修饰符,抽象类可以

密封类

使用sealed关键字标识的类是密封类,密封类不能被继承。典型的密封类即 String
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息