用通过代码:
类内部
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
子类
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
程序集内
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
{
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 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# 中访问修饰符的更多相关文章
-
Java中访问修饰符public、private、protecte、default
Java中访问修饰符public.private.protecte.default的意义讲解:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不 仅 ...
-
C# 中访问修饰符
1.public 完全公开的,公共的 2. private 私有的,只能在当前类的内部访问, 不可修饰类 3.protected 受保护的,只能在当前类的内部以及其子类中访问,不能用来修饰类 4.in ...
-
java中访问修饰符public,private,protected,friendly的作用域
在修饰的元素上没有写任何的访问修饰符,则表示friendly. 作用域 当前类 同一包中 子孙类 其他包中 public √ √ √ √ protected √ √ √ × private √ x x ...
-
C# 类中访问修饰符的优先级与用法(public, internal, protected, private)
首先:类成员的访问级别是以类的访问级别为上限的! 也就是类的访问级别低时,类成员的访问级别高也无法突破类的访问级别 public级别,作用域是这个解决方案() internal级别,作用域是整个装配集 ...
-
Java语言中有4种访问修饰符
转载:http://wuhaidong.iteye.com/blog/851754 Java语言中有4种访问修饰符 在Java语言中有4中访问修饰符:package(默认).private.publi ...
-
Java入门系列之访问修饰符作用范围
前言 之前以为Java和C#中访问修饰符差不多一样,后面才了解到还是有些差异,本节只讲解学习Java中访问修饰符一些需要注意的地方或者从概念上不太好理解我们会通过实际例子来说明,若有错误之处,还请批评 ...
-
java中的访问修饰符
Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符.其中package代表缺省的访问权限,具体到代码中就是不写任何修饰符的 ...
-
简单的描述Java中的构造函数,及访问修饰符
作为一个Java 初学者,对Java的理解可能有些片面,甚至有些错误的理解,对于观看此处的您,希望您选择性观看!!! 访问修饰符: 1.常用访问修饰符: public 共有的 private 私有的 ...
-
php中的访问修饰符 private、protected、public的作用范围
1. private 只能在类内部使用 2. protected 可以在类内部和继承类里使用.类外部不能使用[即实例化后的对象无法调用] 3. public 全部范围适用. 4.子类复写父类中的方法时 ...
随机推荐
-
javascript基础02
javascript基础02 1.数据类型 数据类型的描述在上篇的扩展中有写到链接 由于ECMAScript数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...
-
【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 682 Solved: 384[Submit][Stat ...
-
Java NIO类库Selector机制解析--转
一. 前言 自从J2SE 1.4版本以来,JDK发布了全新的I/O类库,简称NIO,其不但引入了全新的高效的I/O机制,同时,也引入了多路复用的异步模式.NIO的包中主要包含了这样几种抽象数据类型: ...
-
webservice中jaxws:server 和jaxws:endpoint的区别
今天在学习使用spring+cxf发布webservice时遇到个问题,我原来是用 <jaxws:endpoint id="helloWorld" implementor=& ...
-
SQL SERVER 打开脚本报“未能完成操作,存储空间不足”
使用用SQLCMD命令行. 1.快捷键:win+R 2.输入cmd,确定 3.输入命令:sqlcmd -S <数据库服务器名称> -i C:\<脚本文件路径>.sql 例:s ...
-
P2837晚餐队列安排
传送 特写此篇,纪念不用dp做dp题 洛谷说这是个dp,但我不信(其实就是不会dp),因此我们考虑用另一种思路.修改后的队列每一个 数a[i]一定满足a[i]<=a[i+1],那修改后的顺序就是 ...
-
DVWA手记——取消登录
DVWA在渗透测试方面表现相当不错,可以自定义高中低的安全级别.同事为了测试一个小工具,只好取消登录认证.本以为Config可以设置,结果没有,只好自己动手了——才能风衣足食. 更改文件:\dvwa\ ...
-
在Mac下配置php开发环境:Apache+php+MySql (卡在 给mysql 设置不了账号密码)
https://my.oschina.net/joanfen/blog/171109#OSC_h4_3 cmd 进入mysql的方法
-
ASICS各跑鞋分类及选购方法
从跑吧转来的,老帖子后面的鞋子可能不能与时俱进 不过前面的方法不错. 1简介: ASICS鞋子鞋底如果有AHAR或AHAR+的为超耐磨标志,而且超耐度一般都是黑色,用指甲刮鞋底时如刮车轮底胶.ASIC ...
-
Android Studio 编译提示 No installed build tools found. Please install the Android build tools
添加 ANDROID_HOME=D:\Android\adt-bundle-windows\sdk 系统变量即可