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内部类概念 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类与局部内部类. 我们定义内部类时,就 ...
随机推荐
- 04.SQLServer性能优化之---读写分离&数据同步
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 过段时间再继续写文章吧,本来准备把SQLServer一个系列写完的,最近状态很差很不好, ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- [转]利用URLConnection来发送POST和GET请求
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...
- EntityFramework之DetectChanges's Secrets(三)(我为EF正名)
前言 对于应用程序开发者来说,通常不需要考虑太多对于Entity Framework中的变更追踪(change tracking),但是变更追踪和DetectChanges方法是栈的一部分,在这其中, ...
- 通过三次优化,我将gif加载优化了16.9%
WeTest 导读 现在app越来越炫,动不动就搞点动画,复杂的动画用原生实现起来挺复杂,如是就搞起gif播放动画的形式,节省开发成本. 背 景 设计同学准备给一个png序列,开发读取png序列, ...
- C#多线程之线程池篇2
在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...
- Spring中Bean的实例化
Spring中Bean的实例化 在介绍Bean的三种实例化的方式之前,我们首先需要介绍一下什么是Bean,以及Bean的配置方式. 如果 ...
- 深入理解javascript函数定义与函数作用域
最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数.本人把思路整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径 ...
- Oracle 11g必须开启的服务及服务详细介绍
转自:http://www.educity.cn/shujuku/404120.html 成功安装Oracle 11g数据库后,你会发现自己电脑运行速度会变慢,配置较低的电脑甚至出现非常卡的状况,通 ...
- Ubuntu下配置apache开启https
一.HTTPS简述随着网络的日常,信息安全越来越重要,传统的网站都是http协议明文传输,而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比http协议安全. 那ht ...