C#基础回顾(一)—C#访问修饰符
一.写在前面的话
好久没有停下来总结自己,转眼间15年过去好些天,回首过去的日子,亦或失去,亦或所得!生活的节奏,常常让我们带着急急忙忙的节奏去追赶,也许这并不是每个人所期望的生活方式!于他人,于自己,都是平凡生活中的小人物,不奢求荣华富贵,不祈求飞黄腾达,但求得心安理得,平安无恙,拥有属于自己的那一份小幸福足以!从本篇开始,慢慢悉基础,不急不躁,一步步总结,沉淀自己。也希望和各位高手们学习,愿意虚心接受你们的建议。
二.前言
C#中为了数据的安全性以及代码的拓展,定了几种访问级别,根据对应的访问修饰符,可以获取Class里面对应的字段、属性、方法等。
常见的访问修饰符有:
(1)public 公有访问。不受任何限制。
(2)private 私有访问。只限于本类成员访问,子类。
(3)protected 保护访问。只限于本类和子类访问。
(4)internal 内部访问。只限于本项目内访问,其他不能访问。
(5)protected internal 内部保护访问。只限于本项目或是子类访问,其他不能访问
根据MSDN上面的解释,我们也可以理解对应修饰符的作用。https://msdn.microsoft.com/zh-cn/library/wxh6fsc7.aspx
三.常见成员类型的访问修饰符
(1)接口(interface)
接口成员访问修饰符默认为public,且不能显示使用访问修饰符。
(2)类(class)
构造函数默认为public访问修饰符。
析构函数不能显示使用访问修饰符且默认为private访问修饰符。
类的成员默认访问修饰符为private;
(3)枚举(enum)
枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。
(4)结构(struct)
结构成员默认为private修饰符。
结构成员无法声明为protected成员,因为结构不支持继承。
(5)嵌套类型
嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致。
四.访问修饰符测试
(1) 定义程序集AccessModifiersOne,添加DoData.cs类,分别在类中定义相关修饰符的方法。
可以看到在DoData.cs中,通过方法GetNeedData均可以访问对应的方法,GetPublicData、GetPrivateData、
GetInternalData、GetProtectedData、GetProtectedInternalData。在自身Class中访问方法不受限制。
/********************************************************************************
** auth: liupeng
** date: 2016/1/11 星期一 16:14:25
** desc: 访问修饰符
** Ver.: V1.0.0
*********************************************************************************/ namespace AccessModifiersOne
{
public class DoData
{
/// <summary>
/// 公共方法
/// </summary>
/// <returns></returns>
public string GetPublicData()
{
return "My Name Is Public Data";
} /// <summary>
/// 私有方法
/// </summary>
/// <returns></returns>
private string GetPrivateData()
{
return "My Name Is Private Data";
} /// <summary>
/// 受保护方法
/// </summary>
/// <returns></returns>
protected string GetProtectedData()
{
return "My Name Is Protected Date";
} /// <summary>
/// 程序集级别方法
/// </summary>
/// <returns></returns>
internal string GetInternalData()
{
return "My Name Is Internal Data";
} /// <summary>
/// 受保护程序集级别方法
/// </summary>
/// <returns></returns>
protected internal string GetProtectedInternalData()
{
return "My Name Is Prtected Internal Data";
} /// <summary>
/// 取数据
/// </summary>
public void GetNeedData()
{
this.GetPublicData();
this.GetPrivateData();
this.GetInternalData();
this.GetProtectedData();
this.GetProtectedInternalData();
}
}
}
(2)在AccessModifiersOne程序集中添加DoDataTwo.cs,实例化一个DoData对象,可以看到对象只能访问到GetPublicData
、GetInternalData、GetProtectedInternalData方法,其中GetPrivateData、GetProtectedData方法不能访问到,证实了private不对外访问。
/********************************************************************************
** auth: liupeng
** date: 2016/1/11 星期一 16:28:15
** desc: 尚未编写描述
** Ver.: V1.0.0
*********************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace AccessModifiersOne
{
class DoDataTwo
{
public void GetNeedData()
{
var needDataObj = new DoData();
needDataObj.GetPublicData();
needDataObj.GetInternalData();
needDataObj.GetProtectedInternalData();
}
}
}
(3)在AccessModifiersOne程序集中添加DoDataThree.cs,同时继承DoData.cs,实例化一个DoDataThree对象,可以看到该对象可以访问GetPublicData、
GetProtectedData、GetInternalData、GetProtectedInternalData方法,证实了protected在自身类和继承类中可以访问。
/********************************************************************************
** auth: liupeng
** date: 2016/1/11 星期一 16:33:08
** desc: 尚未编写描述
** Ver.: V1.0.0
*********************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace AccessModifiersOne
{
public class DoDataThree : DoData
{
public void GetNeedAnotherData()
{
var needDataObj = new DoDataThree(); needDataObj.GetPublicData();
needDataObj.GetInternalData();
needDataObj.GetProtectedInternalData();
//访问父类的protect方法
base.GetProtectedData();
}
}
}
(4)新建程序集AccessModifiersTwo,同时添加对AccessModifiersOne程序集的引用,添加GetData.cs,实例化一个DoData对象,通过实例化对象,可以看到
只能调用GetPublicData,证实了public访问无限制。
/********************************************************************************
** auth: liupeng
** date: 2016/1/11 星期一 16:37:35
** desc: 尚未编写描述
** Ver.: V1.0.0
*********************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AccessModifiersOne; namespace AccessModifiersTwo
{
public class GetData
{ public void GetNeedData()
{
var needDataObj = new DoData();
needDataObj.GetPublicData(); } }
}
五.结束语
2016年1月瞬息间又过了差不多半个月,时间的在心头的感觉默默然,活在当下,不期盼改变世界,至少先改变自己!一步一脚印,做出来!
一个自己维护的微信公众号,目前文章不多,希望接下来的日子,会一直更新下去,写自己的生活,分享技术,希望热爱生活的技术宅,一起交流!

C#基础回顾(一)—C#访问修饰符的更多相关文章
- C#基础知识八之访问修饰符
1. 类的访问修饰符 修饰符 访问权限 无或者internal 只能在同一个程序集中访问类 public 同一个程序集或引用该程序集的外部都可访问类 abstract或internal abstra ...
- 《Java基础知识》Java访问修饰符(访问控制符)
Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private bo ...
- [.net基础]访问修饰符
标题:[.net基础]访问修饰符 一.前言 基础掌握不牢固啊,所以记录下来. 二.方法访问修饰符Internal (1).创建工程ParentAndSon (2).添加类ModelA namespac ...
- 20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)
1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. ...
- C# 基础(一) 访问修饰符、ref与out、标志枚举等等
C# 基础(一) 访问修饰符.ref与out.标志枚举等等 一.访问修饰符 在C#中的访问修饰符有:private.protected.internal.public public:公共类型,同一程序 ...
- Java基础——protected访问修饰符探讨
Java基础——protected访问修饰符探讨 根据官方说法:(如图) protected修饰符是可以修饰其他包中的子孙类的,但是我做了个实验,结果发现了一个有趣的现象! 具体请往下看: packa ...
- .NET 基础 一步步 一幕幕 [注释、命名规则、访问修饰符、数据类型、常量、变量]
注释.命名规则.访问修饰符.数据类型.常量.变量 话说一个不会写注释的程序猿的不是一个好吃货,我们本篇就从注释开始说起好了. 在C#中有三种注释: 第一种:单行注释 以//开头,后面的就是注释内容 ...
- JAVA_SE基础——59.权限访问修饰符
了解了包的概念,就可以系统的介绍Java中的访问控制级别.在Java中,针对类.成员方法和属性提供了四种访问级别,分别是private.default.protected和public. 权限访问修饰 ...
- Java基础内部类、包的声名、访问修饰符、代码块整理
内部类 14.1内部类概念 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类与局部内部类. 我们定义内部类时,就 ...
随机推荐
- 理解CSS边框border
前面的话 边框是CSS盒模型属性中默默无闻的一个普通属性,CSS3的到来,但得边框属性重新焕发了光彩.本文将详细介绍CSS边框 基础样式 边框是一条以空格分隔的集合样式,包括边框粗细(边框宽度 ...
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
- nodejs之get/post请求的几种方式
最近一段时间在学习前端向服务器发送数据和请求数据,下面总结了一下向服务器发送请求用get和post的几种不同请求方式: 1.用form表单的方法:(1)get方法 前端代码: <form act ...
- SQL Server 常用内置函数(built-in)持续整理
本文用于收集在运维中经常使用的系统内置函数,持续整理中 一,常用Metadata函数 1,查看数据库的ID和Name db_id(‘DB Name’),db_name('DB ID') 2,查看对象的 ...
- JavaScript 对象属性介绍
本篇主要介绍JS中对象的属性,包括:属性的分类.访问方式.检测属性.遍历属性以及属性特性等内容. 目录 1. 介绍:描述属性的命名方式.查找路径以及分类 2. 属性的访问方式:介绍'.'访问方式.'[ ...
- PHP与JAVA构造函数的区别
早期的PHP是没有面向对象功能的,但是随着PHP发展,从PHP4开始,也加入了面向对象.PHP的面向对象语法是从JAVA演化而来,很多地方类似,但是又发展出自己的特色.以构造函数来说,PHP4中与类同 ...
- 你真的会玩SQL吗?之逻辑查询处理阶段
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- [转载]Cookie/Session的机制与安全
Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...
- form表单验证-Javascript
Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...
- 设计模式之工厂模式VS抽象工厂
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...