zoukankan      html  css  js  c++  java
  • C#基础-可访问性-public、ptotected、protected internal、internal、private

    1.类型的可访问性

    a.关键字有public、internal,其中public表示该类型对于程序集都可见、internal表示该类型仅对当前程序集可见。此处的类型可以为类、接口、结构等。

    b.如果不显式指定类型的访问行,internal为类型的默认值。

    c.友元程序集

    应用场景:公司的TeamA在程序集中定义了一组工具类型(UtilityType),可访问性为internal,公司的TeamB希望在另外的程序集使用这些类型。

    如果直接将工具类型修改为public,其它使用TeamA程序集的团队或者公司就可以修改和使用UtilityType中的类型,这显示是不合理的。

    能否将UtilityType定义internal,但是TeamB还是能够使用它们呢?

    使用InternalsVisibleTo的Attribute,TeamB即可自由使用TeamA中的UtilityType

    using System.Runtime.CompilerServices; 
    
    //当前程序集的UserGroup类型可由TeamB的任何代码访问
    [assembly: InternalsVisibleTo("TeamB")]
    namespace TeamA
    {
        class UtilityType
        {
    
        }
    }
     
    2.成员的可访问性
    public 所有程序集、所有方法都可以访问

    protected  internal

    当前程序集或者派生类中可用

    protected

    派生类可用(可在不同程序集)
    interna 当前程序集可用

    private

    当前类可用
     
    a.任何成员想要被访问,都需要在可见的类型内定义。比如说AssemblyA中定义了一个internal类型,该类型有一个public方法。AssemblyB中就不能使用AssemblyA中的这个public方法。因为internal类型对AssemblyB不可用。
     
    b.成员的默认可访问性为private
     
    c.接口成员的可访问性不需要手工指定,默认为public
     
    d.C#规定重写方法的可访问性必须跟基类方法的可访问性相同,访问限制更宽松都不行。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    bzoj3543: [ONTAK2010]Garden
    bzoj千题计划154:bzoj3343: 教主的魔法
    bzoj千题计划153:bzoj2431: [HAOI2009]逆序对数列
    bzoj千题计划152:bzoj3405: [Usaco2009 Open]Grazing2 移动牛棚
    bzoj1131: [POI2008]Sta
    Codeforces Round #204 (Div. 1) B. Jeff and Furik
    Codeforces Round #204 (Div. 1) A. Jeff and Rounding
    Codeforces Round #204 (Div. 1) D. Jeff and Removing Periods
    bzoj2738: 矩阵乘法
    bzoj2527: [Poi2011]Meteors
  • 原文地址:https://www.cnblogs.com/liaozh/p/3458470.html
Copyright © 2011-2022 走看看