【转】C# 中访问修饰符

用通过代码:

 类内部

using System;
class Mod
{
    void defaultMethod()
    {
        Console.WriteLine("this is a default method");
    }

    public void publicMethod()
    {
        Console.WriteLine("this is a public method");

    }
    private void privateMethod()
    {
        Console.WriteLine("this is a private method");
    }

    internal void internalMethod()
    {
        Console.WriteLine("this is a internal method");
    }

    protected void protectedMethod()
    {
        Console.WriteLine("this is a protected method");
    }

    protected internal void protectInternalMethod()
    {
        Console.WriteLine("this is a protected internal method");
    }

    static void Main()
    {
        Mod mod=new Mod();
        mod.defaultMethod();
        mod.publicMethod();
        mod.privateMethod();
        mod.internalMethod();
        mod.protectedMethod();
        mod.protectInternalMethod();
    }

}

D:/Project/handing/char>Method1
this is a default method
this is
a public method
this is a private method
this is a internal method
this
is a protected method
this is a protected internal method

子类

using System;
class Mod
{
    void defaultMethod()
    {
        Console.WriteLine("this is a default method");
    }

    public void publicMethod()
    {
        Console.WriteLine("this is a public method");

    }
    private void privateMethod()
    {
        Console.WriteLine("this is a private method");
    }

    internal void internalMethod()
    {
        Console.WriteLine("this is a internal method");
    }

    protected void protectedMethod()
    {
        Console.WriteLine("this is a protected method");
    }

    protected internal void protectInternalMethod()
    {
        Console.WriteLine("this is a protected internal method");
    }

}

class Test
{
        static void Main()
            {
                Mod mod=new Mod();
            //    mod.defaultMethod();
                mod.publicMethod();
            //    mod.privateMethod();
                mod.internalMethod();
            //    mod.protectedMethod();
                mod.protectInternalMethod();
            }
}

D:/Project/handing/char>Method2
this is a public method
this is a
internal method
this is a protected internal method

程序集内

using System;
class Mod
{
    void defaultMethod()
    {
        Console.WriteLine("this is a default method");
    }

    public void publicMethod()
    {
        Console.WriteLine("this is a public method");

    }
    private void privateMethod()
    {
        Console.WriteLine("this is a private method");
    }

    internal void internalMethod()
    {
        Console.WriteLine("this is a internal method");
    }

    protected void protectedMethod()
    {
        Console.WriteLine("this is a protected method");
    }

    protected internal void protectInternalMethod()
    {
        Console.WriteLine("this is a protected internal method");
    }


}
class Modl : Mod
{
    static void Main()
    {
        Modl mod=new Modl();
            
    //    mod.defaultMethod();
        mod.publicMethod();
    //    mod.privateMethod();
        mod.internalMethod();
        mod.protectedMethod();
        mod.protectInternalMethod();
    }
    


}

D:/Project/handing/char>Method3
this is a public method
this is a
internal method
this is a protected method
this is a protected internal
method

程序集外

放在同一个NAMESPACE中,区别于JAVA的包。

D:/Project/handing/04_01>csc /target:library
Method4.cs
Microsoft (R) Visual C# 2005 编译器 版本 8.00.50727.42
用于
Microsoft (R) Windows (R) 2005 Framework 版本 2.0.50727
版权所有 (C) Microsoft
Corporation 2001-2005。保留所有权利。

D:/Project/handing/04_01>csc /r:Method4.dll
Method5.cs
Microsoft (R) Visual C# 2005 编译器 版本 8.00.50727.42
用于
Microsoft (R) Windows (R) 2005 Framework 版本 2.0.50727
版权所有 (C) Microsoft
Corporation 2001-2005。保留所有权利。

D:/Project/handing/04_01>Method5
this is a public method

Method4.cs

using System;
namespace 4
{
    public class Mod
        {
            void defaultMethod()
            {
                Console.WriteLine("this is a default method");
            }

            public void publicMethod()
            {
                Console.WriteLine("this is a public method");

            }
            private void privateMethod()
            {
                Console.WriteLine("this is a private method");
            }

            internal void internalMethod()
            {
                Console.WriteLine("this is a internal method");
            }

            protected void protectedMethod()
            {
                Console.WriteLine("this is a protected method");
            }

            protected internal void protectInternalMethod()
            {
                Console.WriteLine("this is a protected internal method");
            }


        }
}

Method5.cs

using 4;
using System;
public class Test
{
    public    static void Main()
    {
        Mod mod=new Mod();
        mod.defaultMethod();
        mod.publicMethod();
        mod.privateMethod();
        mod.internalMethod();
        mod.protectedMethod();
        mod.protectInternalMethod();
    }

}

以下摘自:http://blog.csdn.net/bill1315/archive/2007/07/01/1673001.aspx

msdn的解释如下:internal指的是同一个程序集,内部成员和类型才是可以访问的.内部访问通常用于基于组件的开发,因为它使一组组件能够以私有方式进行合作,而不必向应用程序代码的其余部分公开

一个成员或类型只能有一个访问修饰符,使用 protectedinternal 组合时除外。

命名空间上不允许使用访问修饰符。命名空间没有访问限制。

根据发生成员声明的上下文,只允许某些声明的可访问性。如果在成员声明中未指定访问修饰符,则使用默认的可访问性。

不嵌套在其他类型中的顶级类型的可访问性只能是 internal 或 public。这些类型的默认可访问性是 internal。

嵌套类型是其他类型的成员,它们可以具有下表所示的声明的可访问性。






















属于 默认的成员可访问性 该成员允许的声明的可访问性

enum

public

class

private

public

protected

internal

private

protected internal

interface

public

struct

private

public

internal

private

区别JAVA

Java用三个关键字在类的内部设定边界:
public、private、 protected。它们的含义和用法非常易懂。这些“访问指定词”(access
specifier)决定了紧跟其后被定义的东西可以被谁使用。
public表示紧随其后的元素对任何人都是可用的。
而private这个关键字表示除类型创建者和类型的内部方法之外的任何人都不能访问的元素。private就像你与客户端程序员之间的一堵砖墙,如果有人试图访问private成员,就会在编译时得到错误信息。
protected关键字与private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员。

C#的访问修饰符:

     Public:可被所属类和成员以及不属于类的成员访问.

所修饰类的成员

可在任何情况下通过类的对象和类成员被使用.

所修饰的类类型

可在任何情况下被类的访问级别的类继承.

Internal:可被当前程序集访问           

所修饰类的成员

在统一”解决方案”里的使用与Public相同(与命名空间无关).出了解决方案则不可被使用.

              所修饰的类类型(其为类的默认修饰符)

在统一”解决方案”中,可被相同级别的类继承(也就是说被Internal修饰的类),不可被访问就别比自己高的类继承(Public修饰的类).

同时,在不同”解决方案”中,类类型不可被使用.

Protected:可被所属类或派生自所属类的类型访问.

所修饰类的成员

1.      可被类的内部对象(隐指针this)
和类成员使用,以及在类的内部所声明的类的对象使用.

2.      在其他类中声明的自身类的对象却不可访问自身的protected成员.

3.      在同一”命名空间”或不同”命名空间”下,派生自所属类的类就继承了父类的protected以及访问级别以上的类成员,所以他的使用与自身声明的成员无异,其规则参照上两条.

所修饰的类类型

其修饰符不能修饰类.

Private:仅所属类的成员才可以访问

所修饰类的成员(其为类成员的默认修饰符)

1.      可被类的内部对象和类成员使用,以及在类的内部所声明的类的对象使用.

2.      在其他类中声明的自身类的对象也不可访问自身的private成员.

3.      任何情况下,private成员不可被派生类继承.

所修饰的类类型

其修饰符不能修饰类.

----------------------------------------

static:static
修饰符指明成员属于类本身而不属于类的实例。即使创建了类的多个实例,给定应用程序中只存在 static
成员的一个副本。
您只能通过对类的引用(而不是对实例的引用)来访问 static 成员。但是,在类成员声明中,可以通过 this 对象来访问 static
成员。

sealed:sealed
修饰符可以应用于类、实例方法和属性。密封类不能被继承。密封方法会重写基类中的方法,
但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed
修饰符必须始终与 override(C# 参考) 一起使用。

abstract:在类声明中使用 abstract
修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。
因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号
({ })。例如:public abstract void MyMethod();

extern 修饰符用于声明在外部实现的方法。extern
修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 属性一起使用;在这种情况下,该方法还必须声明为 static;
使用
extern 修饰符意味着方法在 C# 代码的外部实现,而使用 abstract
修饰符意味着在类中未提供方法实现。
同样没有方法体

virtual:与abstract类似,只是虚方法必须实现,抽象方法可以不实现

protected:protected
关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。
   
类的实例也不能访问protected成员.

private:是一个成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结构体中才是可访问的

readonly
关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly
字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段为编译时常数,而 readonly
字段可用于运行时常数,

volatile 关键字表示字段可能被多个并发执行线程修改。声明为 volatile
的字段不受编译器优化(假定由单个线程访问)的限制。这样可以确保该字段在任何时间呈现的都是最新的值

【转】C# 中访问修饰符,布布扣,bubuko.com

时间: 2024-12-27 16:54:58

【转】C# 中访问修饰符的相关文章

C#中访问修饰符

范围(从小到大):private<internal/protected<protected internal<public private:只能在本类中使用internal:只能在本程序集(本项目)中使用protected:只能在具有继承关系的子类中使用(可以在不同的项目中)protected internal:在本程序集中或在不同的程序集中但是具有继承关系就可以使用public:都能使用 注意:1.如果类没有使用显示的修饰符,默认为internal,类的访问修饰符只能是public和i

Java中访问修饰符public、private、protecte、default

Java中访问修饰符public.private.protecte.default的意义讲解:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不 仅可以跨类访问,而且允许跨包(package)访问.private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”.被其修饰的类.属性以 及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问.protect: 介于public 和 private 之间的一种访问修饰符,一

java中访问修饰符

较之c++ 中 public,proctected, private 三种访问控制, java多了默认访问控制. java中四种访问控制权限 简单描述为一下四句: 1)private 仅本类可见 (同c++) 2)默认 对本包可见/包内访问 (c++没有) 3)protected 对本包和所有子类可见 (c++中没有本包概念,较 默认访问 可以被在其他包下的子类访问) 4)public 对所有类可见 (同c++) 其中1)4)与c++相同,对2)3)做简单测试 3)protected 对本包可见

Java语言中有4种访问修饰符

转载:http://wuhaidong.iteye.com/blog/851754 在Java语言中有4中访问修饰符:package(默认).private.public和protected. 1.package是默认的保护模式,又加做包访问,没有任何修饰符时就采用这种保护模式.包访问允许域和方法被同一个包内任何类的任何方法访问.(包内访问). 2.private标识得访问模式,表示私有的域和方法只能被同一个类中的其他方法访问,实现了数据隐藏:必要时,可以通过方法访问私有变量.(类内访问). 3

java中四种访问修饰符

Java中的四种访问修饰符:public.protected.default(无修饰符,默认).private. 四种修饰符可修饰的成分(类.方法.成员变量)   public protected default private 类 √ × √ ×(内部类可以用private修饰) 方法 √ √ √ √ 成员变量 √ √ √ √ 四种修饰符的访问权限 public:对所有类可见 protected:对同一包中的类可见.对同一包及不同包中的子类可见 default:对同一包中的类可见.对同一包中的

Java中各种(类、方法、属性)访问修饰符与修饰符的说明

类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所有类访问(使用),其他项目若想使用本项目中的类,必须将本项目打包为jar包,然后加入到classpath中 public类必须定义在和类名相同的同名文件中 (default) 只能被同一个包中的类访问(使用) 默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中 修饰符 名称

【转载】Java中各种修饰符与访问修饰符的说明

转:http://handbook.blog.163.com/blog/static/837295522010889212296/ 类: 访问修饰符  修饰符  class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被所有类访问(使用) public类必须定义在和类名相同的同名文件中 package 可以被同一个包中的类访问(使用) 默认的访问权限,可以省略此关键字,可以定义在和publi

java中抽象类与接口中方法访问修饰符问题 (

1.抽象类中的抽象方法(其前有abstract修饰)不能用private.static.synchronized.native访问修饰符修饰.原 因如下:抽象方法没有方法体,是用来被继承的,所以不能用private修饰:static修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽 象方法用static修饰没有意义:使用synchronized关键字是为该方法加一个锁..而如果该关键字修饰的方法是static方法.则使用的锁 就是class变量的锁.如果是修饰 类方法.则用this变量锁

20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. internal: 只能在当前项目中访问,在同一个项目中,internal和public的权限是一样的. protected internal: protected + internal权限. 1.1:能够修饰类的访问修饰符只有两个: public / internal 1.2:接口中的成员不允许