修饰符可以指定访问的可见性,还可以指定其本质。(文章摘自《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. Entity Framework:Code-First Tutorial开篇

    这个系列文章是关于Entity Framework Code-First的英文系列文章,内容不错,每篇一个主题知识点介绍,特转载过来 原文地址:http://www.entityframeworktu ...

  2. idea调试SpringMvc, 出现:”javax.servlet.ServletException: java.lang.IllegalStateException: Cannot create a session after the response has been committed"错误的解决方法

    调试拦截器出现以下错误: HTTP Status 500 - javax.servlet.ServletException: java.lang.IllegalStateException: Cann ...

  3. 如何使用ros命令行显示图片

    rosrun image_view image_view image:=[TOPIC] 注意:每次只能显示一个UI.不能在一条命令中订阅多个节点.

  4. 通过增删改查对比Array,Map,Set,Object的使用成本和实现方式

    1.Array 和 Map 对比 { // array and map 增 查 改 删 let map = new Map(); let arr = []; // 增 map.set('a', 1); ...

  5. 2017乌鲁木齐区域赛K(容斥原理【求指定区间内与n互素的数的个数】)

    #include<bits/stdc++.h>using namespace std;const long long mod = 998244353;typedef const long ...

  6. JavaWeb:JSP技术基础

    JavaWeb:JSP技术 快速开始 介绍 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%> ...

  7. 剑指Offer的学习笔记(C#篇)-- 旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...

  8. 黑马SSM项目练习中的Oracle操作

  9. js对输入文字个数的限制...

    发表留言或者微博的时候,对输入文字个数的限制,下面分两种情况,每种分别介绍两种实现方式: 第一种:一个汉字算一位,两个字母或符号算一位. 通过ASCII编码来判断 textarea.onkeyup = ...

  10. 016 3Sum Closest 最接近的三数之和

    Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...