面向对象(十)-接口 interface与5种访问修饰符


接口

  • 定义

    • 定义一个接口,在语法上跟定义一个抽象类完全相同,但不允许提供接口中任何成员的实现方法。

    • 一般情况下,接口只能包含方法,属性,索引器和事件的声明。

    • 接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型。

    • 接口成员会自动成为公共成员,不能包含任何访问修饰符。 成员也不能是静态成员。

    • 当类或结构实现接口时,类或结构必须为该接口定义的所有成员提供实现。 接口本身不提供类或结构可以通过继承基类功能的方式来继承的任何功能。 但是,如果基类实现接口,则从基类派生的任何类都会继承该实现。

  • 使用注意:
    每个类只能继承一个类、但是可以实现多个接口

  • 案例

// 定义一个接口
    interface IEnemyPort
    {
        void Attack();
        void Move();
    }

    // 实现一个接口
    public class Boss : IEnemyPort
    {
          public void Attack()
          {

          }

          public void Move()
          {

          }
    }

  • 接口的继承

继承其他的接口,就具备了其他接口声明的方法。 并且可以扩充自己的方法定义。
遵守该接口的类,需要将其所有的接口和继承的接口中的方法定义都实现。

public interface IBossPort : IEnemyPort
{
      void CallHelp();
}

修饰符

  • 简述
    所有类型和类型成员都具有可访问性级别,用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们。 可使用访问修饰符指定声明类型或成员的可访问性。
  • 5种访问修饰符
访问修饰符   说明
public  同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。
private 只有同一类或结构中的代码可以访问该类型或成员。
protected   只有同一类或结构或者此类的派生类中的代码才可以访问的类型或成员。
internal    同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。
protected internal  由其声明的程序集或另一个程序集派生的类中任何代码都可访问的类型或成员。 从另一个程序集进行访问必须在类声明中发生,该类声明派生自其中声明受保护的内部元素的类,并且必须通过派生的类类型的实例发生。
  • 案例
public class Bicycle 
{
      public void Pedal() 
      {
      } 
}
  • 类和结构的可访问性

直接在命名空间中声明的类和结构(即,没有嵌套在其他类或结构中的类和结构)可以是公共类和结构,也可以是内部类和结构。 如果不指定访问修饰符,则默认为 internal。
结构成员,包括嵌套的类和结构,可以声明为公共的、 内部的,或私人的。 类成员(包括嵌套的类和结构)可以为公共的、受保护的内部、受保护的、内部的或私有的。 类成员和结构成员的访问级别,包括嵌套类和结构,默认为私有。 不可以从包含类型之外访问私有嵌套类型。
派生类的可访问性不能高于其基类型。 换句话说,不能有从内部类 A派生的公共类 B。 如果允许这种情况,将会使 A成为公共类,因为 A的所有受保护的成员或内部成员都可以从派生类访问。


  • 类成员和结构成员的可访问性
    可以使用五种访问类型中的任何一种来声明类成员(包括嵌套的类和结构)。 结构成员无法声明为受保护成员,因为结构不支持继承。
    通常,成员的可访问性低于包含成员的类型的可访问性。 如果由成员实现接口方法或重写已在公共基类中定义的虚拟方法时,内部类的公共成员可以从外部程序集访问。
    任何成员的字段、 属性或事件的类型必须至少与该成员本身一样具备可访问性。 同样,作为方法、索引器或代表的任一成员的返回类型和参数类型必须至少有与该成员本身一样的可访问性。 例如,如果 C不是公共类,则不能返回类 C的公共方法 M。 同样,如果 A声明为私有,则类型 A不能有受保护的属性。
    析构函数不能具有可访问性修饰符。
    要设置类成员或结构成员的访问级别,请向该成员声明添加适当的关键字,如下面的示例所示。
        public class Tricycle
        {
            // protected method:
            protected void Pedal() { }

            // private field:
            private int wheels = 3;

            // protected internal property:
            protected internal int Wheels
            {
                get { return wheels; }
            }
        }

  • 其他类型

1 、接口成员始终是公共成员,因为接口的用途是让其他类型能够访问某个类或结构。 访问修饰符不能应用于接口成员。

2 、枚举成员始终是公共的,不能应用任何访问修饰符。

3 、委托行为类似于类和结构。 默认情况下,它们在命名空间中直接声明时具有内部访问权,在嵌套时具有私有访问权。

文章出处

作者:silence_k
链接:http://www.jianshu.com/p/fe0df2db3010
來源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(面向对象(十)-接口 interface与5种访问修饰符)