不定期更新,2017.8.9

一、new

  别看new这个修饰符经常用,恐怕很多人都不知道其本质。我们先来看看new修饰符的官方定义:

  new 仅允许在嵌套类声明中使用,表明类中隐藏了由基类中继承而来的与类中同名的成员。

  看懂了吗?不懂没关系,咱们接着往下看

  首先,我定义一个类:

 namespace 修饰符概念
{
class new修饰符
{ private string StrName; public string strName
{
get { return StrName; }
set { StrName = value; }
} private int IntPassWord; public int intPassWord
{
get { return IntPassWord; }
set { IntPassWord = value; }
} //上面是俩字段和属性,下面来构造,啊哈哈哈
public new修饰符( )
{
strName = "我是蜀云泉";
intPassWord = ;
}
}
}

这个类里面有两个字段属性,一个构造,构造在new的时候会调用默认的那一个,其中构造的作用就是在new的时候初始化类数据。

  控制台代码及结果:

 namespace 修饰符概念
{
class Program
{
static void Main(string[] args)
{
new修饰符 vae = new new修饰符();
Console.WriteLine(vae.strName);
Console.WriteLine(vae.intPassWord);
Console.ReadLine();
}
}
}

  

我的new修饰符这个类写完之后呢他是保存在硬盘中的,和内存没有半毛钱关系(除非这个类里面含有static关键字)。然后在控制台里面你new了一个该类类型的对象vae出来的时候,系统就会在内存中给这个对象vae分配一个该类大小的存储空间出来。就是这样。

二、public修饰符

  来看看官方的定义

  public  表示不限制对该类的访问

  public应该就不用讲了吧,这个用的最多,只要一个成员定义成public之后呢,该类内部可以随意的访问他,其他类也可以随意的访问他,该类被继承之后其子类也可以随意的访问他。通俗的说就是“我的就是大家的,随意拿去用,别客气”

三、protected修饰符

  来看看官方的定义

  protected  表示只能从所在类和所在类派生的子类进行访问

  看着官方的定义就应该明白了,我还是贴上代码吧:

  首先我新建一个类:  

 namespace 修饰符概念
{
class protected修饰符
{
private string StrName; protected string strName
{
get { return StrName; }
set { StrName = value; }
} protected void Start()
{
Console.WriteLine("这是被保护的一个方法");
}
}
}

  在控制台里面调用这个类里面的方法试试行不行:

  

namespace 修饰符概念
{
class Program
{
static void Main(string[] args)
{ protected修饰符 vae = new protected修饰符();
vae. Console.ReadLine();
}
}
}

结果是无法调用的。

接下来看看子类能不能调用:

 namespace 修饰符概念
{
class protected类的继承者:protected修饰符
{ public void test()
{
Start();
}
}
}

完全ok啊。

那么接下来我要做一个猜想了,其子类的实例化对象能不能调用这个保护的方法呢?

namespace 修饰符概念
{
class Program
{
static void Main(string[] args)
{ protected类的继承者 vae = new protected类的继承者();
vae.test(); Console.ReadLine();
}
}
}

是可以的。好了,现在能完全了解protected的官方定义了吧。

四、static

static在百度百科里面介绍的已经很详细了,我再叙述一下吧。static分为静态字段和静态方法。存储在全局数据区,所以不占用类的空间大小。

对于一个全局变量。全局范围内都可以访问到他。这是不用通过什么关系来找的,因为全局变量就摆在那里,大家都看得到,你爱访问就访问。

对于一个静态的成员。它的访问原理跟全局变量是一样的。但是它隐身了,一般类人看不到它,但是它又设置了隐身对自己的类可见,那么那个类就可以看到它。

一个全局变量不属于某个类,或某个函数。
一个静态成员对象它属于某个类,但是它只有一个,这个类可以使用它,但是它是也公有财产,不属于某个对象。当你为一个对象分配空间时,不用再另外给它一个空间来放静态成员对象。所以你在sizeof()时,静态对象的大小没有影响。

五、internal

  internal的意思就是只能在程序集中访问。

例如下面,命名空间Test下的两个类

namespace Test
{
internal class a
{
public void b()
{
Console.Write("蜀云泉真帅");
}
}
public class Write
{
public void WriteOut()
{
class x = new a();
x.b();
}
}
}

现在我外部想调用这个类里面的方法:

//可以这么访问
Test.Write x = new Test.Write();
x.WriteOut();
//但不可以这么访问
Test.a x = new Test.a();
x.b();

这就是internal的功能,只能在程序集中访问。

六、sealed

  sealed是禁止继承的修饰符,例如类A定义了sealed,那么类A就不能被继承,同样,可以用在虚方法,虚属性上面。总之,就是防止被继承。

C#修饰符详解的更多相关文章

  1. Java之Static静态修饰符详解

    Java之Static静态修饰符详解 Java之Static静态修饰符详解 一.特点 1.随着类的加载而加载,随着类的消失而消失,生命周期最长 2.优先于对象存在 3.被所有类的对象共享 4.可以直接 ...

  2. abstract关键字、final关键字、static关键字、访问修饰符详解

     abstract关键字.final关键字.static关键字.访问修饰符详解 abstract关键字: final关键字: static关键字: 访问修饰符:

  3. C# 中4个访问符和8个修饰符详解

    4个访问修饰符(是添加到类.结构或成员声明的关键字) Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. Internal:内部的,是类型和类型成员的访问修饰符.同一个程序集中的所 ...

  4. Koltin——最详细的可见性修饰符详解

    在Kotlin中,不管是类,对象,接口,构造函数,函数,属性及其设置器都具有可见性修饰符.Kotlin中的可见性修饰符共四种.即public.protected.private.internal.在不 ...

  5. C# 之 4个访问修饰符和8个声明修饰符详解

    一.4个访问修饰符(是添加到类.结构或成员声明的关键字) [1] Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. [2] Internal:内部的,是类型和类型成员的访问修饰符 ...

  6. Kotlin——中级篇(三):可见性修饰符详解

    在Kotlin中,不管是类,对象,接口,构造函数,函数,属性及其设置器都具有可见性修饰符.Kotlin中的可见性修饰符共四种.即public.protected.private.internal.在不 ...

  7. PHP正则表达式模式修饰符详解

    PHP模式修饰符又叫模式修正符,是在正则表达式的定界符之外使用.主要用来调整正则表达式的解释,提扩展了正则表达式在匹配.替换等操作的某些功能,增强了正则的能力.但是有很多地方的解释都是错误的,也容易误 ...

  8. C#.net 中 修饰符 详解 (来自MSDN)

    自己理解的不够深刻,无奈基础较差!记上一笔,记忆深刻些,哈哈…… 1. 访问修饰符 public 同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员. private 只有同一 ...

  9. Vue.js学习笔记之修饰符详解

    本篇将简单介绍常用的修饰符. 在上一篇中,介绍了 v-model 和 v-on 简单用法.除了常规用法,这些指令也支持特殊方式绑定方法,以修饰符的方式实现.通常都是在指令后面用小数点“.”连接修饰符名 ...

随机推荐

  1. 07-java学习-方法重载-idea集成开发工具学习-项目-模块-包

    方法重载的概念? 方法重载的好处? 集成开发工具idea的学习 下载 安装 设置 建项目 导入项目 建模块 导入模块 建包 复制粘贴包 建类 复制粘贴类 运行 调试

  2. log4php的使用方法与详细配置

    log4php的使用 首先引入logger.php文件.log4php可以通过引入logger.php来完成自动加载的过程.文件位置如下: 日志记录器自身没有定义日志的输出目的地和格式,所以我们通常需 ...

  3. shell脚本--数值计算

    原生bash不支持简单的数学运算,即使是最简单的加减乘除 但是,可以使用$[]和expr来实现整数运算 如果要实现小数运算,可以使用bc命令 使用$[]来实现: #!/bin/bash #文件名:te ...

  4. CI框架在辅助函数中使用配置文件中的变量

    问题: 现有一个自定义的辅助函数,想要获取配置文件中的配置项(配置文件路径为application/config/config.php) 分析: 辅助函数并不是定义在一个class中,而是很多个可供外 ...

  5. ERROR 2003: Can't connect to MySQL server on 'host ip'(10060)

    https://forums.mysql.com/read.php?51,99347,99358 https://dev.mysql.com/doc/refman/5.7/en/can-not-con ...

  6. 快速简化Android截屏工作

    1.安装Notepad++v6.9 2.插件管理器里Plugin Manager安装AndroidLogger 3.AndroidLogger里的capture功能抓取Android的当前屏幕截图到w ...

  7. laravel orm 中的一对多关系 hasMany

    个人对于laravel orm 中对于一对多关系的理解 文章表 article,文章自然可以评论,表 comment 记录文章的评论,文章和评论的关系就是一对多,一篇文章可以有多个评论. 在 comm ...

  8. servlet生成验证码代码

    package forward; import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt ...

  9. linux 为tomcat指定jdk

    Linux为Tomecat指定JDK   在搭建Jenkin+Sonar集成时,由于系统环境配置了jdk1.7,但是jenkins在安装sonar的插件时,需要jdk1.8.,所以需要在Tomcat指 ...

  10. Leetcode 237.删除链表中的节点 By Python

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 - ...