zoukankan      html  css  js  c++  java
  • Access Modifiers (C# Programming Guide)

    All types and type members have an accessibility level, which controls whether they can be used from other code in your assembly or other assemblies. You can use the following access modifiers to specify the accessibility of a type or member when you declare it:

    public

    The type or member can be accessed by any other code in the same assembly or another assembly that references it.

    private

    The type or member can be accessed only by code in the same class or struct.

    protected

    The type or member can be accessed only by code in the same class or struct, or in a class that is derived from that class.

    internal

    The type or member can be accessed by any code in the same assembly, but not from another assembly.

    protected internal

    The type or member can be accessed by any code in the assembly in which it is declared, or from within a derived class in another assembly. Access from another assembly must take place within a class declaration that derives from the class in which the protected internal element is declared, and it must take place through an instance of the derived class type.

    The following examples demonstrate how to specify access modifiers on a type and member:

    Not all access modifiers can be used by all types or members in all contexts, and in some cases the accessibility of a type member is constrained by the accessibility of its containing type. The following sections provide more details about accessibility.

    Class and Struct Accessibility

    Classes and structs that are declared directly within a namespace (in other words, that are not nested within other classes or structs) can be either public or internal. Internal is the default if no access modifier is specified.

    Struct members, including nested classes and structs, can be declared as public, internal, or private. Class members, including nested classes and structs, can be public, protected internal, protected, internal, or private. The access level for class members and struct members, including nested classes and structs, is private by default. Private nested types are not accessible from outside the containing type.

    Derived classes cannot have greater accessibility than their base types. In other words, you cannot have a public class B that derives from an internal class A. If this were allowed, it would have the effect of making A public, because all protected or internal members of A are accessible from the derived class.

    You can enable specific other assemblies to access your internal types by using the InternalsVisibleToAttribute. For more information, see Friend Assemblies (C# and Visual Basic).

    Class and Struct Member Accessibility

    Class members (including nested classes and structs) can be declared with any of the five types of access. Struct members cannot be declared as protected because structs do not support inheritance.

    Normally, the accessibility of a member is not greater than the accessibility of the type that contains it. However, a public member of an internal class might be accessible from outside the assembly if the member implements interface methods or overrides virtual methods that are defined in a public base class.

    When a member of a class or struct is a property, field, method, event, or delegate, and that member either is a type or has a type as a parameter or return value, the accessibility of the member cannot be greater than the type. For example, you cannot have a public method M that returns a class C unless C is also public. Likewise, you cannot have a protected property of type A if A is declared as private.

    User-defined operators must always be declared as public. For more information, see operator (C# Reference).

    Destructors cannot have accessibility modifiers.

    To set the access level for a class or struct member, add the appropriate keyword to the member declaration, as shown in the following example.

    Note Note

    The protected internal accessibility level means protected OR internal, not protected AND internal. In other words, a protected internal member can be accessed from any class in the same assembly, including derived classes. To limit accessibility to only derived classes in the same assembly, declare the class itself internal, and declare its members as protected.

    Other Types

    Interfaces declared directly within a namespace can be declared as public or internal and, just like classes and structs, interfaces default to internal access. Interface members are always public because the purpose of an interface is to enable other types to access a class or struct. No access modifiers can be applied to interface members.

    Enumeration members are always public, and no access modifiers can be applied.

    Delegates behave like classes and structs. By default, they have internal access when declared directly within a namespace, and private access when nested.

    C# Language Specification

    For more information, see the C# Language Specification. The language specification is the definitive source for C# syntax and usage.

     

    reference: http://msdn.microsoft.com/en-us/library/ms173121.aspx

  • 相关阅读:
    基于bootsplash的嵌入式linux启动画面定制
    Android程式编写及调试新手入门3
    linux2.6 内核的 initrd
    exec与xargs区别 Leone
    jquery扩展方法:jquery.fn.extend与jquery.extend Leone
    MySQL查询in操作 查询结果按in集合顺序显示 Leone
    CentOS Linux Vsftp服务器配置 Leone
    linux[批量复制并重命名]和[批量复制文件到多个文件夹] Leone
    学会了这些保你5年内买车买房 Leone
    国外网赚项目的分类 Leone
  • 原文地址:https://www.cnblogs.com/sandy_liao/p/1891493.html
Copyright © 2011-2022 走看看