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

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

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. 负载均衡实现故障vip自动漂移

    环境说明演示vip自动漂移 192.168.237.50 192.168.237.51 vip: 192.168.237.5 keepalived开源软件实现 keepalived可以实现当vip挂的 ...

  2. mysql 毫秒时间转换

    当在数据库中存储的时间类型为bigint类型时,及时间的毫秒数 java中:  new DATE().gettime();//获取时间的毫秒数 当需要将毫秒数转化为时间的时候 mysql中: FROM ...

  3. Java HashMap问题

    1:map集合简述:         我们常用的集合实现类有HashMap.LinkedHashMap.TreeMap,HashTable.HashMap根据key的hashCode值来保存value ...

  4. rest_framework框架实现之(视图,路由,渲染器)

    一视图 一 在前面我们使用视图时继承的时APIview from rest_framework.response import Response from rest_framework.paginat ...

  5. 【leetcode】939. Minimum Area Rectangle

    题目如下: Given a set of points in the xy-plane, determine the minimum area of a rectangle formed from t ...

  6. bootstrap 标签页的使用(tab)

    <!DOCTYPE html> <html> <head> <title></title> <link rel="style ...

  7. sql 条件查询

    使用SELECT * FROM <表名>可以查询到一张表的所有记录.但是,很多时候,我们并不希望获得所有记录,而是根据条件选择性地获取指定条件的记录,例如,查询分数在80分以上的学生记录. ...

  8. Hbase的rowkey设计

    HBase的rowKey设计技巧 1.设计宗旨与目标 主要目的就是针对特定的业务模型,按照rowKey进行预分区设计,使之后面加入的数据能够尽可能的分散于不同的rowKey中.比如复合RowKey. ...

  9. BZOJ 3238: [Ahoi2013]差异((单调栈+后缀数组)/(后缀树))

    [传送门[(https://www.lydsy.com/JudgeOnline/problem.php?id=3238) 解题思路 首先原式可以把\(len\)那部分直接算出来,然后通过后缀数组求\( ...

  10. php中正则表达式总结(不容错过)

    php中正则表达式总结(不容错过) 一.总结 一句话总结: 无论js,php,java,python里面中的正则都是差不多一样的,所以用点脑子 用到正则的地方很多,比如 nginx的配置文件 1.ph ...