首先:类成员的访问级别是以类的访问级别为上限的!

也就是类的访问级别低时,类成员的访问级别高也无法突破类的访问级别

public级别,作用域是这个解决方案()

internal级别,作用域是整个装配集(Assembly)

protected级别,作用域是整个解决方案()中以它自己的类为基类以及它的派生类

private级别,作用域是它自己的类内部(class)

以下的例子中把人可以操作的和人不可以操作的通过修饰类型进行划分(人可以操作的有加油加速这种动作,而人不能凭借意念随便修改发动机转速等)

public class Vehicle
{

封装的字段,属性和函数:(这些都不允许随便被赋值,直接用private封装,用只读属性来调用现实)

        protected int _rpm;// 发动机转速,也应该封装成属性,但是为了演示protected的效果我把他写成protected修饰的字段,protected一般是给方法用的,比如下面的Burn函数。

        private int _fuel;//油量

        private int _speed//速度
{
get{ return _rpm / 100;}
}
//耗油(发动机的事情),我既不想把Burn方法暴露给外界引发错误调用,又想让我的子类Car访问,使用protected
protected void Burn(int a)
{
_fuel = _fuel - a;
}

/暴露出来的函数:/

        //加油(人的事情)
public void Refuel()
{
_fuel = 100;
}
        //加速_汽车通用_1000(人的事情)
public virtual void Accelerate()
{
Burn(1);
_rpm += 1000;
}
        //看速度表(人的事情)
public void ShowSpeed()
{
Console.WriteLine(Speed);
}
        //看油表(人的事情)
public void ShowFeul()
{
Console.WriteLine(_fuel);
}
}

小轿车类

    public class Car : Vehicle
{
//加速_轿车专用_1500(人的事情)
public override void Accelerate()
{
Burn(1);
_rpm += 1500;
}
}

跑车类

    public class RaceCar : Car
{
//涡轮增压_跑车特有_3000(人的事情)
public void TurBoAccelerate()
{
Burn(2);
_rpm += 3000;
}
}

公交车类

这里又有protected的一个特性,只有在通过派生类类型发生访问时,基类的受保护成员在派生类中才是可访问的

换句话说,就是以出现protected的类为基类,派生出的类,在这个类内部才可以用protected修饰的字段,属性和方法。

    public class Bus : Vehicle
{
public void SlowAccelerate()
{
Burn(1);
_rpm += 500;//这里可以使用_rpm
}
static void Main(string[] args)
{
Bus bus = new Bus();
bus._rpm = 10000;‘//这里可以使用_rpm
bus.Burn(1);//这里可以使用Burn()
}
}

但是如果在其他类中,比如:

    class Program
{
static void Main(string[] args)
{
Bus bus = new Bus();
bus.Burn(1);//这句话无法编译通过
bus._rpm = 10000;//这句话无法编译通过 }
}

虽然还是派生类的实例对象,但是不在派生类中,所以protected修饰的字段和属性是无法执行的。

C# 类中访问修饰符的优先级与用法(public, internal, protected, private)的更多相关文章

  1. C# 中访问修饰符

    1.public 完全公开的,公共的 2. private 私有的,只能在当前类的内部访问, 不可修饰类 3.protected 受保护的,只能在当前类的内部以及其子类中访问,不能用来修饰类 4.in ...

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

    Java中访问修饰符public.private.protecte.default的意义讲解:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不 仅 ...

  3. 12、类成员访问修饰符public/private/producted/readonly

    1.private 类的私有成员 private 类的私有成员,只能在内部访问,在外部访问不到,无法被继承,我们可以将不需要被外部修改的定义为私有的 私有成员,只能在内部访问,在外部访问不到 priv ...

  4. 【转】C# 中访问修饰符

    用通过代码:  类内部 using System;class Mod{    void defaultMethod()    {        Console.WriteLine("this ...

  5. C#类的访问修饰符

    默认情况下,类声明为内部的,即只有当前工程中的代码才能访问它.可以用internal访问修饰符关键字显式指定,但这不是必须的,类在定义时默认为此类型的类.但是C# 方法默认访问级别: private. ...

  6. java类的访问修饰符

    1.java中外部类的访问修饰符有如下四种: public,默认,abstract,final // public,默认,abstract,final. public class Test1 {} c ...

  7. java中访问修饰符public,private,protected,friendly的作用域

    在修饰的元素上没有写任何的访问修饰符,则表示friendly. 作用域 当前类 同一包中 子孙类 其他包中 public √ √ √ √ protected √ √ √ × private √ x x ...

  8. Java——类的访问修饰符

    1.java中外部类的访问修饰符有如下四种: public,默认,abstract,final // public,默认,abstract,final. public class Test1 {} c ...

  9. 类的访问修饰符_C#

    访问控制修饰符: 访问控制修饰符 类内部 子类 程序集内 程序集外 Default √ Public √ √ √ √ Private √ Internal √ √ √ Protected √ √ Pr ...

随机推荐

  1. SSD网络结构

    SSD算法,其英文全名是Single Shot MultiBox Detector. SSD的网络结构流程如下图所示:SSD总共11个block,相比较于之前的VGG16,改变了第5个block的第4 ...

  2. spring中配置Properties对象的方法

    工作中有必要将Properties对象进行注解进入:比如 class Person{ @Autowired private Properties properties; } 如果有这种需求的话,那么需 ...

  3. HDU 6326 Problem H Monster Hunter

    \(\mathtt{Problem H}\) \(\mathtt{Monster}\) \(\mathtt{Hunter}\) \(\mathcal{Description}\) 题目 给定一棵 \( ...

  4. Map集合类(二.其他map集合jdk1.8)

    java集合笔记一 java集合笔记二 java集合笔记三 1.hashtable(线程安全) 1.存储数据为数组+链表2.存储键值对或获取时通过hash值取模数组长度确定节点在数组中的下标位置 in ...

  5. JavaScript实现时间上一天和下一天切换

    JavaScript实现时间上一天和下一天切换 1.先获取时间戳毫秒数 var date = new Date()//实例化时间戳 var time = date.getTime()//获取当前毫秒数 ...

  6. 6371. 【NOIP2019模拟2019.9.28】基础图论练习题

    题目 题目大意 维护一个无向图的割边条数,支持加边和删边. 正解 (PS:这是我很久之前在OJ上打出来的题解,现在直接copy过来) 题解只有一句话,估计没多少人可以看得懂.感觉出题人偷懒不想写题解- ...

  7. 学习Caffe(一)安装Caffe

    Caffe是一个深度学习框架,本文讲阐述如何在linux下安装GPU加速的caffe. 系统配置是: OS: Ubuntu14.04 CPU: i5-4690 GPU: GTX960 RAM: 8G ...

  8. NX二次开发-Block UI C++界面(表达式)控件的获取(持续补充)

    Expression(表达式)控件的获取 NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); // ...

  9. NX二次开发-使用MFC对话框不能用UF_UI_select等函数解决方法

    VC/MFC调用UG Dialog要进入加锁状态 加锁 UF_UI_lock_ug_access ( UF_UI_FROM_CUSTOM ); 此处为UF_UI_select的函数 解锁 UF_UI_ ...

  10. winform界面设计

    http://www.cnblogs.com/wuhuacong/  这位大师给了我指导方向 http://officeribbon.codeplex.com 提供了ribbon界面的控件 动态web ...