修饰符可以指定访问的可见性,还可以指定其本质。(文章摘自《C#高级编程(第9版)》以及Microsoft)

1. 可见性修饰符

public:应用于所有类型或成员,即任何代码均可以访问该项——公有访问,不受任何限制

protected:应用于类型和内嵌类型的所有成员,即只有派生的类型能访问该项——保护访问,只限于本类和子类访问

internal:应用于所有类型或成员,即只能在包含它的程序集中访问该项——内部访问。只限于本程序集内访问。不带修饰符的类是默认internal

private:应用于类型和内嵌类型的所有成员,即只能在它所属的类型中访问该项——私有访问。只限于本类成员访问

protected internal:应用于类型和内嵌类型的所有成员,即只能在包含它的程序集和派生类型的任何代码中访问该项——内部保护访问。只限于本程序集内和子类访问。

注:protected、private、protected internal不能用来定义类,只能应用于成员。但是可用于定义嵌套类,嵌套的内部类可以访问外部类所有成员,包括私有成员。

 public class OuterClass   //不能使用protected、private、protected internal
{
protected class InnerClass //可以使用protected、private、protected internal,可以访问OuterClass所有成员,其为OuterClass成员之一
{
// etc.
}
// etc.
}

2. 其他修饰符

new:应用于函数成员,即成员用相同的签名隐藏继承的成员—— new 修饰符会用同样的名称创建一个新成员并使原始成员变为隐藏。override 修饰符会扩展继承成员的实现。对同一成员同时使用 new  和 override 是错误的做法。详见https://msdn.microsoft.com/zh-cn/435f1dw2(VS.80).aspx

static:应用于所有成员,即成员不作用于类的具体实例——存储在全局数据区,不占用类的空间大小。

virtual:仅应用于函数成员,即成员可以由派生类重写——该修饰符修饰的函数可以作为正常的函数使用,也可以在派生类中用override进行重写

abstract:仅应用于函数成员,即虚拟成员定义了成员的签名,但没有提供实际代码——该修饰符修饰的函数不能作为正常的函数使用,必须在派生类中用override进行重写

override:仅应用于函数成员,即成员重写了继承的虚拟或抽象成员

sealed:应用于类、方法和属性,即对于类,不能继承自密封类。对于属性和方法,成员重写已继承的虚拟成员,但任何派生类中的任何成员都不能重写该成员。该修饰符必须与override一起使用。——禁止继承

extern:仅用于静态DllImport方法,即成员在外部用另一种语言实现。——用于声明在外部实现的方法,此时方法还需声明为static;不能与abstract一起使用

const: 用于声明某个常量字段或常量局部变量,即指定域或局部变量的值不能被改动。

event:用于声明发布服务器类中的事件

readonly:可应用于字段,即只能在声明时以及相同类的内部被赋值。

注:

  • abstract、sealed作为类修饰符

abstract:以指示某个类只能作为其他类的基类。

sealed:以指示某个类不能被继承。

  • virtual和abstract区别
 class MyBaseClass
{
// virtual auto-implemented property. Overrides can only
// provide specialized behavior if they implement get and set accessors.
public virtual string Name { get; set; } // ordinary virtual property with backing field
private int num;
public virtual int Number
{
get { return num; }
set { num = value; }
}
} class MyDerivedClass : MyBaseClass
{
private string name; // Override auto-implemented property with ordinary property
// to provide specialized accessor behavior.
public override string Name
{
get
{
return name;
}
set
{
if (value != String.Empty)
{
name = value;
}
else
{
name = "Unknown";
}
}
} }

virtual例子

 abstract class ShapesClass
{
abstract public int Area();
}
class Square : ShapesClass
{
int side = ; public Square(int n)
{
side = n;
}
// Area method is required to avoid
// a compile-time error.
public override int Area()
{
return side * side;
} static void Main()
{
Square sq = new Square();
Console.WriteLine("Area of the square = {0}", sq.Area());
} interface I
{
void M();
}
abstract class C : I
{
public abstract void M();
} }
// Output: Area of the square = 144

abstract例子

C#访问修改符的更多相关文章

  1. C# 类的访问修改符

    C#共有五种修饰符:public.private.protected.internal.protected internal. ◆public:公有,对所有类可见,不受任何限制 ◆protected: ...

  2. C# 可访问性不一致问题(修改成员的访问修饰符)。

    错误实例一:父类的访问性低于子类 class Person { } public class Students:Person { } 错误实例二:方法的访问修饰符需要和参数的类型的访问修饰符一致 cl ...

  3. .NET 基础 一步步 一幕幕 [注释、命名规则、访问修饰符、数据类型、常量、变量]

    注释.命名规则.访问修饰符.数据类型.常量.变量 话说一个不会写注释的程序猿的不是一个好吃货,我们本篇就从注释开始说起好了. 在C#中有三种注释: 第一种:单行注释  以//开头,后面的就是注释内容 ...

  4. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  5. Java中各种(类、方法、属性)访问修饰符与修饰符的说明

    类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...

  6. java 访问修饰符

    此题考察修饰符,函数定义等,故从网上搜罗了下相关资料,总结如下: 类.方法.成员变量和局部变量的可用修饰符 修饰符 类 成员访求 构造方法 成员变量 局部变量 abstract(抽象的) √ √ - ...

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

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

  8. c# 访问修饰符的访问权限

    1. 访问修饰符. 指定声明的类型和类型成员的可访问性. (1) public:是类型和类型成员的访问修饰符.公共访问是允许的最高访问级别.对访问公共成员没有限制. (2) private:是一个成员 ...

  9. java的访问控制(包、访问修饰符、修饰符)

    一.     java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ...

随机推荐

  1. 简单Hadoop集群环境搭建

    最近大数据课程需要我们熟悉分布式环境,每组分配了四台服务器,正好熟悉一下hadoop相关的操作. 注:以下带有(master)字样为只需在master机器进行,(ALL)则表示需要在所有master和 ...

  2. Codeforces Round #279 (Div. 2) C. Hacking Cypher (大数取余)

    题目链接 C. Hacking Cyphertime limit per test1 secondmemory limit per test256 megabytesinputstandard inp ...

  3. C++基础之类和对象一

    (1)类是一种复杂的数据类型,它是抽象数据类型的实现,是数据和相关操作的封装体.类用来确定一类对象的形为,而这些行为是通过类的内部数据和操作来确定的.这些行为是通过一种操作接口来描述的.(2)类的定义 ...

  4. SAS笔记(6) PROC MEANS和PROC FREQ

    PROC MEANS和PRC FREQ在做描述性分析的时候很常用,用法也比较简单,不过这两个过程步的某些选项容易忘记,本文就梳理一下. 在进入正文前,我们先创建所需的数据集TEST_SCORES: D ...

  5. 2018牛客多校第九场E(动态规划,思维,取模)

    #include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long l ...

  6. 实现html页面只自动跳转一次

    function show(){ var  value= sessionStorage.getItem("flg"); if(value==null || value==undef ...

  7. centos6.5下安装python3.6、pip、ipython

    一.先更换系统源 为了下载顺畅一般都会更改为国内源. 1 cd /etc/yum.repos.d/ 2 wget http://mirrors.163.com/.help/CentOS6-Base-1 ...

  8. Github搭建个人博客

    Github的搭建博客真的是非常容易,所需的步骤只有三个:要完成自己的github.io博客网站,总共分三步:开通自己的github.io repo,选择一款Jekyll的主题,编写并发布博客.下面将 ...

  9. linux下生成随机密码

    常见的简单的两种方法 1.openssl rand -base64 32 2.date | md5sum

  10. Composite模式(组合设计模式)

    Composite 设计模式? 在计算机的文件系统中,有"文件夹"的概念(在有些操作系统(Linux操作系统)中,也称为"目录").文件夹里面既可以放入文件,也 ...