博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
点点滴滴的成长[2011-11-1]:理解C#修饰符
阅读量:4561 次
发布时间:2019-06-08

本文共 3784 字,大约阅读时间需要 12 分钟。

指挥者
namespace Bulider {
class ComputerDirctor {
public void CreateComputer(ComputerBulider computerBulider) {
computerBulider.CreateComputerName(); computerBulider.CreateComputerMemory(); computerBulider.CreateComputerDiskSize(); } } }

    小菜,2009年正式学习C#,之前对C有基础编写能力,java也学过半年,delphi用过半年。最终选着了.Net,在此不想谈什么门户之争。C#学到如今也已经有3年了,多多少少的实际经验,也有些。由于大学主要是自学,所以C#根本没有系统的学习过,没有参加过培训,但是实现各种功能,小菜还是有点小盲目的自信的,应付项目是没有问题。但是我认为,一个好的程序员,不是为了完成工作,而是能够写出非常好的代码,所以小菜今天开始要从基础中重新学习,看看用了很多次的C#能给大家带来什么新的收获,温故知新,是也。

   第一篇C#修饰符,相信大家一提到修饰符,都了然。常用的几种:

类修饰符:public、internal、partial、abstract、sealed、static

成员修符:public、protected、private、internal、sealed、abstract、virtual、override、readonly、const

最近看到一篇关于设计模式的文章,构造者模式,我便自己边看编写,可是写出来。代码如下:

构造者 
构造者 namespace Bulider {
abstract public class ComputerBulider {
private Computer _computerInstance; public Computer ComputerInstance {
get { return _computerInstance; } set { _computerInstance = value; } } abstract public void CreateComputerName(); abstract public void CreateComputerMemory(); abstract public void CreateComputerDiskSize(); } }
产品模型 
namespace Bulider {
class Computer {
private string _name; public string Name {
get { return _name; } set { _name = value; } } private string _memory; public string Memory {
get { return _memory; } set { _memory = value; } } private string _diskSize; public string DiskSize {
get { return _diskSize; } set { _diskSize = value; } } public void ShowComputerMessage() {
Console.WriteLine(String.Format("------{0}------", _name)); Console.WriteLine(String.Format("电脑品牌:{0}", _name)); Console.WriteLine(String.Format("电脑内存:{0}", _memory)); Console.WriteLine(String.Format("电脑硬盘:{0}", _diskSize)); } } }
产品实例
namespace Bulider {
class Asus : ComputerBulider {
public override void CreateComputerName() {
ComputerInstance = new Computer(); ComputerInstance.Name = "Asus"; } public override void CreateComputerMemory() {
ComputerInstance.Memory = "5GB"; } public override void CreateComputerDiskSize() {
ComputerInstance.DiskSize = "250GB"; } } }

 

namespace Bulider {
class Program {
static void Main(string[] args) {
ComputerDirctor computerDirctor = new ComputerDirctor(); ComputerBulider asus = new Asus(); //asus.ComputerInstance.ShowComputerMessage(); ComputerBulider apple = new Apple(); // apple.ComputerInstance.ShowComputerMessage(); ComputerBulider acer = new Acer(); //acer.ComputerInstance.ShowComputerMessage(); computerDirctor.CreateComputer(asus); asus.ComputerInstance.ShowComputerMessage(); computerDirctor.CreateComputer(apple); apple.ComputerInstance.ShowComputerMessage(); computerDirctor.CreateComputer(acer); acer.ComputerInstance.ShowComputerMessage(); Console.ReadLine(); } }

基本上一个简单的构造者模式,大家可以看看,这几个类的修饰符,程序 貌似看上去没问题,但是运行的话会报出错的信息:错误 1 可访问性不一致: 属性类型“Bulider.Computer”比属性“Bulider.ComputerBulider.ComputerInstance”的可访问性低 D:\DB\Bulider\Bulider\Bulider\ComputerBulider.cs 12 25 Bulider。

问题的原因在这里,  public Computer ComputerInstance

        {
            get { return _computerInstance; }
            set { _computerInstance = value; }
        }这里作为一个属性,将产品暴露给了 public 修饰的Class。而产品的默认修饰,是空,即   internal,因为public暴露了权限给程序集外,而internal修饰的产品,仅能在程序内部调用,所以修饰符优先级的问题引起异常。

这令我更加深入的理解了修饰符的概念,相信很多老程序员,不小心下也有过类似的问题吧。

小菜,写完了,也许您看的很简单,或者是很弱智的问题,但是小菜真的从中更加深了对修饰符的理解。s

转载于:https://www.cnblogs.com/BinaryBoy/archive/2011/11/01/2231256.html

你可能感兴趣的文章
Paint Chain HDU - 3980(sg)
查看>>
Chales常用操作
查看>>
C++ 运算符重载<<
查看>>
windows镜像
查看>>
Flask 模板语法
查看>>
spark-2.2.0安装和部署——Spark集群学习日记
查看>>
ZOJ FatMouse' Trade 贪心
查看>>
音乐播放器
查看>>
SQL COOKBOOK (Ch.1-10)
查看>>
创建数组
查看>>
dict使用
查看>>
[转] 移动平台Html5的viewport使用经验
查看>>
ASP.NET MVC的帮助类HtmlHelper和UrlHelper
查看>>
《Python数据科学手册》第五章机器学习的笔记
查看>>
ubuntu16.04 配置爬虫环境
查看>>
Centos7,PHP7安装swoole
查看>>
02_ListActive中响应事件 并LogCat输出
查看>>
doubleclick adx note
查看>>
Celery框架
查看>>
[c#]asp.net开发微信公众平台(4)关注事件、用户记录、回复文本消息
查看>>