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#类和成员定义的更多相关文章

  1. C++类的成员函数(在类外定义成员函数、inline成员函数)

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...

  2. PHP中如何定义类及其成员属性与操作

    1.类的定义: i. 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ 成员属性........ 操    ...

  3. PHP如何定义类及其成员属性与操作

    1.类的定义: 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ //成员属性 $name     =  ' ...

  4. c++函数模板作为类的成员函数,编译报错LNK2019的解决方法

    为了使某个类的成员函数能对不同的参数进行相同的处理,需要用到函数模板,即template<typename T> void Function(). 编译时报错LNK2019 解决方法: 1 ...

  5. [.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)

    [.net 面向对象编程基础] (10) 类的成员(字段.属性.方法) 前面定义的Person的类,里面的成员包括:字段.属性.方法.事件等,此外,前面说的嵌套类也是类的成员. a.类的成员为分:静态 ...

  6. 深入理解PHP内核(十四)类的成员变量及方法

    原文链接:http://www.orlion.ga/1237/ 类的成员变量在PHP中本质是一个变量,只是这些变量都归属于某个类,并且给这些变量是有访问控制的. 类的成员方法在PHP中本质是一个函数, ...

  7. Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  8. (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考

    昨天去面试一家公司,面试题中有一个题,自己没弄清楚,先记录如下: class D { public: void printA() { cout<<"printA"< ...

  9. C++类的成员函数使用的一些小总结

    From: http://blog.csdn.net/xiayefanxing/article/details/7607506 这一阵做项目代码开发的时候,用到了在一个C++文件中使用另一个类的成员函 ...

随机推荐

  1. htmlparser源码简单分析

    Htmlparser源代码分析 一.根目录下的类 1.Attribute.java 属性类,四个field:mName,mAssignment,mValue,mQuote; 空白标签时:mName=n ...

  2. 使用 jQuery 进行前端验证 -- 1

    如今很多的网站偶会有不同层次的验证去验证用户输入的信息是否符合我们所需要的数据类型.并且可以说任何有输入的地方都需要的去验证,验证一方面是要求用户输入正确格式的数据,同时也是避免恶意的用户进行非法的输 ...

  3. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.5

    Show that matrices with distinct eigenvalues are dense in the space of all $n\times n$ matrices. (Us ...

  4. Axis2 WebService(基于REST风格)

    http://www.lifeba.org/arch/java_axis2_webservice_rest.html Axis2除了提供传统的webservice方法外,还提供了对Rest的支持.Ax ...

  5. [King.yue]VS2012 无法启动IIS Express Web服务器的解决方案

    打开VS2012解决方案资源管理器 -> 点选 Web 项目选择 -> 属性 -> Web -> 选择“使用 Visual Studio 开发服务器” -> 选中“自动分 ...

  6. VS2008压力测试时web测试记录器无显示

    系统:win7 浏览器:IE8 web测试记录器:Web Test Recorder   在运行vs2008Web压力测试时一直在浏览器左侧的web测试记录器无显示. 解决办法:     在IE工具栏 ...

  7. linkscrpit

    一 section是什么? 好吧,我们需要解释一下平时编译链接生成的二进制可执行程序(比如说ELF,EXE也行),so或者dll,内核(非压缩的,参加本系列第一节内容.vmlinux),或者ko是怎么 ...

  8. Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)

    1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...

  9. iOS设备的硬件适配 (关于armv6, armv7, armv7s ) <转>

    <转> http://blog.csdn.net/smking/article/details/8148702 1.OpenGL ES版本支持   iPhone:iPhone 3G以下(包 ...

  10. JS自定义事件(Dom3级事件下)

    原文出处:  http://www.w3cfuns.com/notes/11861/e21736a0b15bceca0dc7f76d77c2fb5a.html . 我拿出作者中的一段,感谢作者原创. ...