类是最常见的一种引用类型,最简单的定义如下

  1. class YouClassNam
  2. {}

复杂的类可能包含一下内容

类属性    类属性以及类修饰符.  非嵌套的类修饰符有:public,internal,abstract,sealed,static, unsafe,partial

类名     各种类型参数,唯一基类,多个接口

花括号内   类成员(方法,成员属性,索引器,事件,字段,构造方法,运算符函数,嵌套类型和终止器)

1---->字段


  字段是类或结构体中的变量.

  字段不一定要初始化,没有初始化的字段会赋一个默认值(0,\0,null,false).字段初始化语句在构造方法之前执行

  只读 字段只能在声明时或者在其所属的类构造方法中被赋值,且赋值后不能改变.

  可以同事声明多个字段

  1. class MyOne
  2. {
       static readonly int leg=8,eye=2;
  3. string name;
  4. public int Age=10;
  5. }

以下修饰符可以用来修饰字段

静态修饰符 static
访问权限修饰符 public internal private protected
继承修饰符 new
不安全代码修饰符 unsafe
只读修饰符 readonly
跨线程访问修饰符 volatile

2---->方法

  方法是用一组语句实现实现某个行为.

  方法可以应一下修饰符修饰

静态修饰符 static
访问权限修饰符 public internal private protected
继承修饰符 new abstract virtual override sealed
部分方法修饰符 partial
非托管代码修饰符 unsafe extern

  (1)重载方法

    确保方法签名相同,就可以在类中重载方法(多方法公用同一方法名)

  1. void Foo(int x){...}
  2. void Foo(double x){...}
  3. void Foo(int x,double y){...}
  4. void Foo(double x,int y){...}

   (2)值传递和引用传递

    参数是值传递还是引用传递,也是方法签名的一部分.例如Foo(int)和Foo(ref int)或Foo(out int)可以同时出现在一个类中,但是Foo(ref int)和Foo(out int)不能同时出现在同一个类中

  1. void Foo(int x){...}
  2. void Foo(ref int x){...}//此处正确
  3. void Foo(out int x){...}//此刻错误

 3---->构造方法

  构造方式是执行类或者结构体的初始化代码.

  构造方法和方法定义类似,区别仅在于构造方法名和返回值只能和封装它的类相同

  1. public class Person
  2. {
  3.   string name; //定义字段
  4.   public Person (string n)//定义构造方法
  5.   {
  6.    name=n; //初始化字段
  7.    }
    }
    ...
  8. Person p=new Person("HanMei");//调用构造方法

 构造方法支持以下修饰符

访问权限修饰符 public internal private protected
非托管代码修饰符 unsafe extern

 (1)重载构造方法

    为避免重复,一个构造方法可以用this关键字调用另一个构造方法

当一个构造方法调用另一个时,被调用的构造方法先执行.

  1. using System;
  2. namespace 构造函数重载
  3. {
  4. public class Person
  5. {
  6. private string _name;
  7. private int _age;
  8. public string Name
  9. {
  10. get { return _name; }
  11. set { _name = value; }
  12. }
  13. public int Age
  14. {
  15. get { return _age; }
  16. set { _age = value; }
  17. }
  18. public Person(string name)
  19. {
  20. this.Name = name;
  21. }
  22. public Person(string name, int age):this(name)
  23. {
  24. this.Age = age;
  25. }
  26. }
  27. }

  (2)隐式无参数构造方法

  默认c#编译器会自动为木有显式定义构造方法的类生成构造方法.一旦显示定义构造方法,系统将不再自动生成无参构造方法,即使显示定义无参构造函数,也不是原来的了

  1. public class Person
  2. {
  3. public Person(){}
  4. }

  (3)构造方法和字段初始化顺序

  字段初始化按声名的先后顺序,在构造方法之前执行!!!!!!!!!

  首先,在声名字段的时候赋予初始值:

  1. class Person
  2. {
  3. int a=10;//第一个被初始化
  4. int b =20;//第二个被初始化
  5. }

  (4)非公有构造方法

  通常定义非公有构造方法的原因是为了在一个静态方法中控制类实例的创建(单例????).

  静态方法可以用于从池中返回类对象,而不必创建一个新对象实例,或者根据不同的输入属性返回不同的子类.

  1. public class Person
  2. {
  3.     Person() { }//私有构造方法
  4.     public static Person Creat(...)
  5. {
  6. //定义逻辑,返回Person的实例
  7. .......
  8. }
  9. }

  this引用指的是引用实例自身,下面,方法Marry将Person的name字段设定为this.

c#中创建类(更新中)的更多相关文章

  1. JavaScript中创建类,赋值给ajax中的data参数

    缘由:因为要给根据是否选中checkbox来动态增加ajax中data的属性(ajax的data属性格式的几种方法,参考http://www.jb51.net/article/46676.htm) d ...

  2. 在mysql数据库中创建Oracle数据库中的scott用户表

    在mysql数据库中创建Oracle数据库中的scott用户表 作者:Eric 微信:loveoracle11g create table DEPT ( DEPTNO int(2) not null, ...

  3. 在efcore 中创建类 通过实现IEntityTypeConfiguration<T>接口 实现实体类的伙伴类 实现FluentApi

    1 创建实体类: public partial class NewsCategory : IAggregationRoot { public NewsCategory() { } public Gui ...

  4. eclipse中创建类和方法自动注释

    <?xml version="1.0" encoding="UTF-8"?><templates><template autoin ...

  5. Python中的类(中)

    上一篇介绍了Python中类相关的一些基本点,本文看看Python中类的继承和__slots__属性. 继承 在Python中,同时支持单继承与多继承,一般语法如下: class SubClassNa ...

  6. 【java学习】实践中总结--持续更新中

    目录: 一些定义 配置环境 相关语法 1.一些定义 java中DO的含义: https://blog.csdn.net/canot/article/details/51698047 DAO 中包含了各 ...

  7. Typescript中的类 Es5中的类和静态方法和继承(原型链继承、对象冒充继承、原型链+对象冒充组合继承)

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  8. 在eclipse中创建Web项目中没有web.xml的解决方法

      右键点击项目 → “Java EE Tool” → “Generate Deployment descriptor stub” 即可生成web.xml文件

  9. ES6中的类

    前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScri ...

随机推荐

  1. 抽象类Abstract的简单使用

    写了一个比较简单易懂的例子,如下图 AbstractBaseClass是抽象的基类,Class1,Class2是继承他的子类,并实现他的方法. //AbstractBaseClass.cs里的代码 p ...

  2. dedecms 常用标签

    都是常用的一些标签,大家可以用ctrl+F实现搜索. 网站名称:{dede:global.cfg_webname/} 网站根网址:{dede:global.cfg_basehost/} 网站根目录:{ ...

  3. Linux下OpenSSL 安装

    安装环境:  操作系统:CentOs6.3 OpenSSL Version:openssl-1.0.0e.tar.gz 目前版本最新的SSL地址为http://www.openssl.org/sour ...

  4. Emmet:一个Html/Css快速编辑神器的插件

    一.介绍:Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度 二.使用 ...

  5. google搜索新姿势

    大前提:英文Google→http://www.google.com或http://www.google.cn 第一篇 在搜索框上输入:"indexof/"inurl:lib 再按 ...

  6. python学习(3)

    Python学习(3)切片(Slice):根据索引范围取出字符串里面的内容,比如: l=range(100)   l[:8] [0, 1, 2, 3, 4, 5, 6, 7]              ...

  7. 【转】Spring的WebServiceTemplate访问WebService的方法及其本质原理

    WebService客户端调用的本质就是将SAOP格式的XML通过通信协议发送到WebService的服务器端,然后接收服务器端返回的XML. 本文简单介绍一下如何通过Spring提供的WebServ ...

  8. preference activity框架

    从android3.0开始preference框架做了重大改变 框架由一下四部分组成 1.preference screen布局 一个xml文件,指定了要显示的Preference控件. 每个控件应当 ...

  9. 启动列表的activity

    每学一个知识点就要重新创建一个项目,感觉那样太繁琐了,特别是android studio开发,没创建一个项目都会重新打开一个窗口 所以我就在那想,何不有一个功能列表,点击每一个列表项的时候就跳转到那个 ...

  10. [CSS] Make element not selectable

    .noselect { -webkit-touch-callout: none; /* iOS Safari */ -webkit-user-select: none; /* Chrome/Safar ...