C#访问修改符
修饰符可以指定访问的可见性,还可以指定其本质。(文章摘自《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#访问修改符的更多相关文章
- C# 类的访问修改符
C#共有五种修饰符:public.private.protected.internal.protected internal. ◆public:公有,对所有类可见,不受任何限制 ◆protected: ...
- C# 可访问性不一致问题(修改成员的访问修饰符)。
错误实例一:父类的访问性低于子类 class Person { } public class Students:Person { } 错误实例二:方法的访问修饰符需要和参数的类型的访问修饰符一致 cl ...
- .NET 基础 一步步 一幕幕 [注释、命名规则、访问修饰符、数据类型、常量、变量]
注释.命名规则.访问修饰符.数据类型.常量.变量 话说一个不会写注释的程序猿的不是一个好吃货,我们本篇就从注释开始说起好了. 在C#中有三种注释: 第一种:单行注释 以//开头,后面的就是注释内容 ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- Java中各种(类、方法、属性)访问修饰符与修饰符的说明
类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...
- java 访问修饰符
此题考察修饰符,函数定义等,故从网上搜罗了下相关资料,总结如下: 类.方法.成员变量和局部变量的可用修饰符 修饰符 类 成员访求 构造方法 成员变量 局部变量 abstract(抽象的) √ √ - ...
- 【转】C# 中访问修饰符
用通过代码: 类内部 using System;class Mod{ void defaultMethod() { Console.WriteLine("this ...
- c# 访问修饰符的访问权限
1. 访问修饰符. 指定声明的类型和类型成员的可访问性. (1) public:是类型和类型成员的访问修饰符.公共访问是允许的最高访问级别.对访问公共成员没有限制. (2) private:是一个成员 ...
- java的访问控制(包、访问修饰符、修饰符)
一. java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ...
随机推荐
- 简单Hadoop集群环境搭建
最近大数据课程需要我们熟悉分布式环境,每组分配了四台服务器,正好熟悉一下hadoop相关的操作. 注:以下带有(master)字样为只需在master机器进行,(ALL)则表示需要在所有master和 ...
- Codeforces Round #279 (Div. 2) C. Hacking Cypher (大数取余)
题目链接 C. Hacking Cyphertime limit per test1 secondmemory limit per test256 megabytesinputstandard inp ...
- C++基础之类和对象一
(1)类是一种复杂的数据类型,它是抽象数据类型的实现,是数据和相关操作的封装体.类用来确定一类对象的形为,而这些行为是通过类的内部数据和操作来确定的.这些行为是通过一种操作接口来描述的.(2)类的定义 ...
- SAS笔记(6) PROC MEANS和PROC FREQ
PROC MEANS和PRC FREQ在做描述性分析的时候很常用,用法也比较简单,不过这两个过程步的某些选项容易忘记,本文就梳理一下. 在进入正文前,我们先创建所需的数据集TEST_SCORES: D ...
- 2018牛客多校第九场E(动态规划,思维,取模)
#include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long l ...
- 实现html页面只自动跳转一次
function show(){ var value= sessionStorage.getItem("flg"); if(value==null || value==undef ...
- centos6.5下安装python3.6、pip、ipython
一.先更换系统源 为了下载顺畅一般都会更改为国内源. 1 cd /etc/yum.repos.d/ 2 wget http://mirrors.163.com/.help/CentOS6-Base-1 ...
- Github搭建个人博客
Github的搭建博客真的是非常容易,所需的步骤只有三个:要完成自己的github.io博客网站,总共分三步:开通自己的github.io repo,选择一款Jekyll的主题,编写并发布博客.下面将 ...
- linux下生成随机密码
常见的简单的两种方法 1.openssl rand -base64 32 2.date | md5sum
- Composite模式(组合设计模式)
Composite 设计模式? 在计算机的文件系统中,有"文件夹"的概念(在有些操作系统(Linux操作系统)中,也称为"目录").文件夹里面既可以放入文件,也 ...