C#类和成员定义
1 定义类
C#用关键字class来定义类。默认情况下,类声明为内部(internal)的,即只有当前项目中的代码才能访问它。与之相对应的,还可以用public关键字来修饰,这样该类还可以由其他项目中的代码来访问。
以这种方式声明的类不能是私有或者受保护的,但是可以把这些修饰符用于修饰类成员。编译器不允许派生类的可访问性高于基类。也就是说,内部类可以继承于一个公共基类,但是公共类不能派生于内部类。
除此之外,还可以指定两个关键字abstract和sealed来修饰。abstract指定抽象类(不能实例化,只能继承,可以有抽象成员)。sealed用来指定密封类(不能继承)。abstract与sealed两个关键字是互斥的。
C#中类定义的语法可以写作:
1: [internal | public] [abstract | sealed] class <类名> : [<基类>,] [<接口1>,<接口2>…]
2: {
3: //类定义
4: }
小结:
|
关键字 |
性 质 |
|
|
可访问性 |
public |
可以由其他项目中的代码来访问 |
|
internal |
只有当前项目中的代码才能访问 |
|
|
可继承性 |
abstract |
不能实例化,只能继承,可以有抽象成员 |
|
sealed |
不能继承,子类中无法修改 |
需要注意的是C#与C++不同,所有继承都是公共继承,不支持私有继承!如果类定义时没有指定基类,默认吧System.Object作为基类。
2 定义类成员
2.1 成员定义
类成员中包括字段、属性和方法。访问级别包括public(成员可以由任何代码访问)、private(成员只能由类中代码访问,默认使用private)、internal(只能由项目内代码访问)、protected(只能由类或派生类的代码访问)。后两个关键字可以合并使用,所以也有protected internal成员。他们只能由定义的类和项目中的派生类的代码来访问。
也可以使用static关键字来声明字段、属性和方法,表明它们是静态成员,而不是对象实例的成员。
2.2 字段定义
修饰符:public、private、internal、protected、static、readonly。其中readonly修饰的字段只能在声明阶段或者构造函数阶段可以进行赋值。
2.3 定义方法
方法可以用下列关键字来修饰:
static——只能通过类名来访问。
virtual——方法可以重写。
abstract——方法必须在非抽象的派生类中重写。
override——重写一个基类方法时必须使用该关键字。如果使用了override,还可以配合使用sealed指定在派生类中该方法不能被重写。
例:public override sealed void DoSomething()。
extern——方法定义放在其他地方。
2.4 定义属性
可将属性标记为 public、private、protected、internal或protected internal。这些访问修饰符定义类的用户如何才能访问属性。属性还可以使用virtual、override和abstract关键字,就像方法一样。
C#的属性拥有两个类似于函数的块,称为访问器。同一属性的get和set访问器可能具有不同的访问修饰符。例如,get可能是public以允许来自类型外的只读访问;set 可能是 private 或 protected。访问器可以使用的访问修饰符取决于属性的可访问性,访问器的可访问性不能高于它所属的属性,也就是说,私有属性的访问器不能包含任何可访问修饰符,而公共属性可以对其访问器使用所有可访问修饰符。
C#类和成员定义的更多相关文章
- C++类的成员函数(在类外定义成员函数、inline成员函数)
类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...
- PHP中如何定义类及其成员属性与操作
1.类的定义: i. 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ 成员属性........ 操 ...
- PHP如何定义类及其成员属性与操作
1.类的定义: 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ //成员属性 $name = ' ...
- c++函数模板作为类的成员函数,编译报错LNK2019的解决方法
为了使某个类的成员函数能对不同的参数进行相同的处理,需要用到函数模板,即template<typename T> void Function(). 编译时报错LNK2019 解决方法: 1 ...
- [.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)
[.net 面向对象编程基础] (10) 类的成员(字段.属性.方法) 前面定义的Person的类,里面的成员包括:字段.属性.方法.事件等,此外,前面说的嵌套类也是类的成员. a.类的成员为分:静态 ...
- 深入理解PHP内核(十四)类的成员变量及方法
原文链接:http://www.orlion.ga/1237/ 类的成员变量在PHP中本质是一个变量,只是这些变量都归属于某个类,并且给这些变量是有访问控制的. 类的成员方法在PHP中本质是一个函数, ...
- Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
- (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考
昨天去面试一家公司,面试题中有一个题,自己没弄清楚,先记录如下: class D { public: void printA() { cout<<"printA"< ...
- C++类的成员函数使用的一些小总结
From: http://blog.csdn.net/xiayefanxing/article/details/7607506 这一阵做项目代码开发的时候,用到了在一个C++文件中使用另一个类的成员函 ...
随机推荐
- Oracle行转列的函数
--行转列的函数-- CREATE OR REPLACE FUNCTION Calvin( col IN VARCHAR2,dw IN VARCHAR2) RETURN VARCHAR2 IS ret ...
- POJ 1321 棋盘问题 DFS搜索
简单搜索 练习一下回溯 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- Bzoj 1562: [NOI2009]变换序列 匈牙利算法,二分图匹配
题目: http://cojs.tk/cogs/problem/problem.php?pid=409 409. [NOI2009]变换序列 ★★☆ 输入文件:transform.in 输出文 ...
- 关于int **
例子1: int foo(int *array) { array = (); ; } //外头调用 int * uidArray = NULL; foo(uidArray): 这时候我想要在函数里给数 ...
- c++ de-mangle 反编译器命名工具:c++filt
nm *.so | c++filt c++filt symblo
- groupinfo
http://www.wenzizone.com/2011/07/07/centos_x64_yum_da_jian_xen.html [yum xen] 配置epel就不说了,ruiy哥的文档有; ...
- 【转】ldconfig和ldd用法
ldconfig和ldd用法 一.ldconfig ldconfig --helpUsage: ldconfig [OPTION...]Configure Dynamic Linker Run Tim ...
- hi3531 SDK 编译 uboot, 改动PHY地址, 改动 uboot 參数 .
一,编译uboot SDK文档写得比較清楚了,写一下须要注意的地方吧. 1. 之前用SDK里和别人给的已经编译好的uboot,使用fastboot工具都刷不到板子上.最后自己用SDK里uboot源代码 ...
- java list<string>组 传递到值js排列
方法一 后台: String sql = "select * from tree"; list = this.treeService.getTreeList(sql ...
- php中error_report函数的含义及各参数含义
个错误级别,如下: 1 E_ERROR 致命的运行时错误.错误无法恢复过来.脚本的执行被暂停2 E_WARNING 非致命的运行时错误.脚本 ...