1.什么是类:

  在c#中类是一种数据结构,它可以包括数据成员、函数成员(方法、属性、事件、索引器、索引符、实例构造函数、静态构造函数和析构函数、及嵌套类型)。

  属性是,类中字段和方法的结合体,通过定义属性,调用该类的时候,可以直接对该类的属性进行读写操作。

  属性的定义通过get和set关键字来实现,get关键字用来定义读取该属性时的操作,而set关键字用来定义设置该关键字的操作。

  如果一个属性同时具备了get和set操作,则该属性为读写性质的属性;如果只有get操作,则为只读属性,若只有set操作,则为只写属性。

2.类的定义: 

 class Person
{
  //类成员定义
}

  默认情况下,如果class关键字前没有显式地指定访问修饰符,则类的访问修饰符为internal,表示仅在当前项目内可被访问。

  下表为类定义中可以使用的访问修饰符:

  ----------------------------------------------------------------------------------------------------------------------------------------------

          修 饰 符                访 问 权 限

  ----------------------------------------------------------------------------------------------------------------------------------------------

      无或为internal                只能在同一程序集中访问类

        public                  同一程序集或引用该程序集的其他程序集都可以访问类

      abstract或internal abstract           只能在同一程序集中访问类,该类不能被实例化,只能被继承

      public abstract                 同一程序集或引用该程序集的其他程序集都可以访问类,不能被实例化,只能被继承

      sealed或internal sealed             只能在同一程序集中访问类,该类不能被继承,只能被实例化

      public sealed                 同一程序集或引用该程序集的其他程序集都可以访问类,不能被继承,只能被实例化

  ----------------------------------------------------------------------------------------------------------------------------------------------

3.类的成员

  类的成员包括字段、属性、方法、和构造函数等。与类一样,也有自己的访问权限。下表为类成员修饰符访问权限。

  ----------------------------------------------------------------------------------------------------------------------------------------------

          修 饰 符                访 问 权 限

  ----------------------------------------------------------------------------------------------------------------------------------------------

          public                 同一程序集或引用该程序集的其他程序集都可访问

          private                  只有同一个类中可以访问

          protected                只有同一个类或派生类可以访问

          internal                 只有同一个程序集可以访问

          protected internal            在同一个程序集中,该类和派生类可以访问

  ----------------------------------------------------------------------------------------------------------------------------------------------

4.字段

  字段由访问修饰符、字段类型、字段名称组成,如下:

    public class Person
{
//姓名,类型为字符串类型
private string name;
//年龄,类型为int类型。
public int age;
//性别,类型为bool类型
protected bool sex;
}

  可以使用关键词readonly或const来定义字段。若使用readonly修饰,表示该字段是只读的,若使用const修饰,则表示该字段是不变的。下面的代码演示了

  二者的区别:

    public class Person
{
private readonly string name; public const int age = ; protected bool sex;//包含字段
}

  以上代码中,若使用readonly修饰字段,则不需要在定义时初始化,而是可以在构造函数中再完成初始化;但若使用const修饰字段,如果没有在定义字

  段时初始化,而是可以在构造函数中再完成初始化;但若使用const修饰字段,如果没有在定义字段时初始化,就会产生编译错误,错误信息:“常量字段

  要求提供一个值”。

  如前所述,也可以通过static关键字来声明静态字段。静态字段与实例字段的区别在于----静态字段必须通过类来访问,而实例字段则需要通过类的对象实

  例来进行访问,如下:

    public class Person
{
//静态字段定义,多了关键字static
public static string name; //实例成员定义
public int age;
}

  以上代码中定义的静态字段name只能通过了吗,即Person.name的方式访问;而对于实例字段age,则通过类的实例对象访问,

  即:new Person().age的方式访问。

5.属性

  属性是对字段的扩展,字段最后设置为private,因为这样可以防止客户端直接对字段进行篡改,从而保证了内部成员的完整性。

  为了访问类中的私有字段,c#提供了属性这种机制,用来对字段的灵活控制和访问。如下:

  

    public class Person
{
//私有字段定义
private string name; //公有属性定义
public string Name
{
//get访问器 get
{
return name;
} //set访问器
set
{
//value是隐式参数
name = value;
}
}
}

   属性除了可以直接访问私有字段外,还可以根据需要加入更多的逻辑控制代码。例如,人的年龄一般在0-120岁之间,当代码试图将这个范围之外的数赋值

给年龄字段时,则可以在属性中添加抛出异常的代码来对错误进行处理。如下:

  

 public class Person
{
private int age; public int Age
{
//get访问器
get
{
return age;
} set
{
//在set访问器中添加更多的逻辑代码
if(value < || value>)
{
throw (new ArgumentOutOfRangeException("AgeIntPropery", value, "年龄必须在0-120之间"));
} age = value;
}
} }

  和静态字段类似,属性也可通过static关键字声明为静态属性。此时的静态属性属于类级别,不能通过类的实例进行访问,也不能在静态属性中使用非静

态的字段。如下:

 

    public class Person
{
private static string name; //静态属性
public static string Name
{
//get访问器
get
{
return name;
}
set
{
name = value;
}
} }

6.方法

  方法由方法签名和一系列语句的代码块组成。其中,方法签名包括方法的访问级别(如public或private)、可修饰符(例如abstract关键字)、方法名称

和参数。Main方法是每个c#应用程序的入口点,在启动应用程序时,Main由公共语音运行时(CLR)负责调用。如下:

  

    public class Person
{
//类中定义了一个没有返回值的打印方法
//name是用户传入的参数
public void Print(string name)
{
Console.WriteLine("输入的值为: " + name);
}
}

  

【c# 学习笔记】c#中的类的更多相关文章

  1. java学习笔记07--日期操作类

    java学习笔记07--日期操作类   一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...

  2. 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

    <Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...

  3. AJPFX学习笔记JavaAPI之String类

    学习笔记JavaAPI之String类 [size=10.5000pt]一.所属包java.lang.String,没有子类.特点:一旦被初始化就不可以被改变. 创建类对象的两种方式: String ...

  4. 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理

    在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...

  5. JVM学习笔记-第六章-类文件结构

    JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...

  6. ArcGIS案例学习笔记-点集中最近点对和最远点对

    ArcGIS案例学习笔记-点集中最近点对和最远点对 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:对于点图层,查找最近的点对和最远的点对 数据: 方法: 1. ...

  7. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  8. Swift学习笔记 - OC中关于NSClassFromString获取不到Swift类的解决方案

    在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案: 问题的发现过程 UIViewController ...

  9. JavaScript学习笔记——JS中的变量复制、参数传递和作用域链

    今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习.今天学习笔记主要有这样几个关键字:变量.参数传递.执 ...

  10. java学习笔记之日期日历类

    java学习笔记之日期日历 Date日期类概述: 表示特定的瞬间,精确到毫秒 Date类的构造方法: 1.空参数构造方法 Date date = new Date(); 获取到当前操作系统中的时间和日 ...

随机推荐

  1. Soda Theme sublime 自定义编辑器主题

    1.Soda ThemeSublime Text 3中较为常用的一款自定义编辑器主题,用过的人都说好.Soda Theme包含代码着色.标签.图标,拥有light和dark两种颜色主题便于用户在不同时 ...

  2. 从设计稿到实现React应用(分类数据处理)

    1. 确定设计稿和数据 设计稿: 数据: [ {category: "Sporting Goods", price: "$49.99", stocked: tr ...

  3. 四十三.MongoDB副本集 MongoDB文档管理

    一.部署MongoDB副本集 1.1 启用副本集配置并指定集群名称 rs1 1.2 定义集群成员列表 部署好机器51,52,53:51上配置 bind_ip=192.168.4.51(要改) port ...

  4. qt动态库实现无边框窗体的消息处理 nativeEvent的使用

    需求: 在动态库中创建一个窗口句柄,可以给外部调用,库的调用者,通过这个句柄发送消息到底层库,库里面可以实现对消息的处理 m_FHandle=AllocateHWnd(WndProcDllMsg); ...

  5. GitHub中PR(Pull request)操作

    1. 贡献代码: 贡献代码,通俗的说,就是自己修改了代码,希望合并到别人的Repository(仓库)中.将自己的智慧贡献给开源社区.下面将详细讲解步骤 1.1 第一步:fork 在GitHub社区闲 ...

  6. P2679 子串 DP

    P2679 子串 DP 从字符串A中取出\(k\)段子串,按原顺序拼接,问存在多少个方案使拼接的字符串与字符串B相同 淦,又是这种字符串dp 设状态\(ans[i][j][k]\)表示A串位置\(i\ ...

  7. 数据结构实验之图论十:判断给定图是否存在合法拓扑序列(SDUT 2140)

    分析:BFS判断是否有环. #include<bits/stdc++.h> using namespace std; typedef long long ll; int gra[200][ ...

  8. python3 pyinstaller 图标改变不了的问题

    命令 pyinstaller -F ./test.py --noconsole --icon=test.ico 在使用后可能发现新生成的图标仍然为默认图标,有以下解决方案: 将生成的exe文件复制到另 ...

  9. P3313 [SDOI2014]旅行——树链剖分+线段树(动态开点?)

    P3313 [SDOI2014]旅行 一棵树,其中的点分类,点有权值,在一条链上找到一类点中的最大值或总和: 树链剖分把树变成链: 把每个宗教单开一个线段树,维护区间总和和最大值: 宗教很多,需要动态 ...

  10. c 字符串的结束标志

    //char carray[]="nihao"; char carray[]={'a','b','c','d','\0'}; printf("array=%s" ...