zoukankan      html  css  js  c++  java
  • 接口和抽象类

    接口

    1.接口是一个用来定义程序的协议,它描述可属于任何类或结构的一组相关行为。接口可由方法、属性、事件和索引器或这4种成员类型的任何组合构成,但不能包含字段。

    接口具有以下特征:

    a).接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

    b).不能直接实例化接口。

    c).接口可以包含事件、索引器、方法和属性。

    d).接口不包含方法的实现。

    e).类和结构可从多个接口继承。

    f).接口自身可从多个接口继承。

    修饰符 interface 接口名称 : 继承的接口列表

    {

             接口内容;

    }

    说明:

    a).声明接口时,除interface关键字和接口名称外,其他的都是可选项。

    b).可以使用new、public、protected、internal和private等修饰符声明接口,但接口成员必须是公共的。

    2.接口的实现与继承

    interface IPeople

    {

    string Name

    {

    get;

    set;

    }

    }

    calss Program : IPeople

    {

    string name = "";

    public string Name

    {

    get

    {

    return name;

    }

    set

    {

    name = value;

    }

    }

    }

    IPeople iPeople = new Program();

    iPeople.Name = “Tom”;

    3.显式接口成员实现

    interface ImyInterface1

    {

             int Add();

    }

    interface ImyInterface2

    {

             int Add();

    }

    calss MyClass: ImyInterface1, ImyInterface2

    {

    int ImyInterface1.Add()

    {

                      Return 3+5;

    }

    int ImyInterface2.Add()

    {

                      return 1+3+5;

    }

    }

    MyClass myClass = new myClass();

    ImyInterface1 imyInterface1 = myClass;

    Console.WriteLine(imyInterface1.Add());

    注:

    a).显式接口成员实现中不能包含访问修饰符、abstract、virtual、override或static修饰符。

    b).显式接口成员属于接口的成员,而不是类的成员,因此,不能使用类对象直接访问,只能通过接口对象来访问。

    抽象类与抽象方法

    1.抽象类主要用来提供多个派生类可共享的基类的公共定义,它与非抽象类的主要区别:

    a).抽象类不能直接实例化。

    b).抽象类中可以包含抽象成员,但非抽象类中不可以。

    c).抽象类不能被密封。

    访问修饰符 abstract class 类名:基类或接口

    {

             //类成员

    }

    说明:声明抽象类时,除abstract关键字、class关键字和类名外,其他的都是可选项。

    2.抽象方法概述及声明

    抽象方法就是在声明方法时,加上abstract关键字,声明抽象方法时需要注意以下两点:

    a).抽象方法必须声明在抽象类中。

    b).声明抽象方法时,不能使用virtual、static和private修饰符。

    public abstract class MyClass

    {

             public abstract void method();

    }

    3.抽象类与接口

    抽象类和接口的区别主要有以下几点:

    a).它们的派生类只能继承一个基类,即只能直接继承一个抽象类,但可以继承任意多个接口。

    b).抽象类中可以定义成员的实现,但接口中不可以。

    c).抽象类中可以包含字段、构造函数、析构函数、静态成员或常量等,接口中不可以。

    d).抽象类中的成员可以是私有的(只要它们不是抽象的)、受保护的、内部的或受保护的内部成员,但接口中的成员必须是公共的。

    注:抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。

    密封类与密封方法

    1.C#中使用密封类时,如果类满足如下条件,则应将其密封:

    a).类是静态类。

    b).类包含带有安全敏感信息的继承的受保护成员。

    c).类继承多个虚成员,并且密封每个成员的开发和测试开销明显大于密封整个类。

    d).类是一个要求使用反射进行快速搜索的属性。密封属性可提高反射在检索属性时的性能。

    访问修饰符 sealed class 类名:基类或接口

    {

             //类成员

    }

    说明:

    a).密封类不能作为基类被继承,但它可以继承别的类或接口。

    b).在密封类中不能声明受保护成员或虚成员,因为受保护成员只能从派生类进行访问,而虚成员只能在派生类中重写。

    c).由于密封类的不可继承性,因此密封类不能声明为抽象的,即sealed修饰符不能与abstract修饰符同时使用。

    《C#从入门到精通》读后总结

  • 相关阅读:
    约瑟夫问题
    [bzoj] 2049 洞穴勘探 || LCT
    [bzoj] 1597 土地购买 || 斜率优化dp
    [usaco] 2008 Dec Largetst Fence 最大的围栏 2 || dp
    [LNOI] 相逢是问候 || 扩展欧拉函数+线段树
    [bzoj] 1588 营业额统计 || Splay板子题
    [hdu] 5115 Dire Wolf || 区间dp
    [poj] 1651 Multiplication Puzzle || 区间dp
    [bzoj] 1090 字符串折叠 || 区间dp
    [bzoj] 1068 压缩 || 区间dp
  • 原文地址:https://www.cnblogs.com/hmliang/p/5303998.html
Copyright © 2011-2022 走看看