zoukankan      html  css  js  c++  java
  • C#图解教程读书笔记(第6章 类进阶)

    类成员声明语句由下列部分组成:核心声明、一组可选的修饰符和一组可选的特性(attribute)。

    [特性] [修饰符] 核心声明

    修饰符:

    如果有修饰符,必须放在核心声明之前。

    如果有多个修饰符,要有序放置

    特性

    如果有特性,必须放在修饰符和核心声明之前

    如果有多个特性,可以任何顺序

    修饰符:public,private,static,const

    实例类成员

    public int Mem1;

    静态字段

    static int Mem2;被所有的实例可见,并且如果一个实例改变该值,其它实例使用的该值也会变化。

    静态成员可以不用实例化,直接使用。

    静态函数成员

    Static public void PrintValA();

    成员常量

    Const int IntVal = 100;// 定义int类型常量,值为100

    属性

    属性是代表类的实例或类中的一个数据项的成员。

    private int theRealValue;

    public int TheRealValue

    {

    get { return theRealValue; }

    set { theRealValue = value; }

    }

    但是使用属性的话,不能直接用get和set,而是直接使用赋值的方式。

    构造函数

    如果需要外部调用,需要声明为public

    和类名相同,但是没有返回类型。

    析构函数

    每个类只能有一个析构函数

    析构函数不能带参数

    析构函数不能带访问修饰符

    析构函数和类有相同的名称,但以一个"~"字符作前缀

    析构函数只对类的实例起作用,因为没有静态析构函数。

    不能在代码中显式地调用析构函数。

    标准的清理模式

    class FuncTest:IDisposable

    {

    bool disposed = false;

    public void Dispose()

    {

    Dispose(true);

    GC.SuppressFinalize(this);

    }

    ~FuncTest()

    {

    Dispose(false);

    }

    protected virtual void Dispose(bool disposing)

    {

    if (disposed == false)

    {

    if (disposing == true)

    {

    // Dispose the managed resources

    }

    // Dispose the unmanaged resources

    }

    disposed = true;

    }

    }

    readonly修饰符

    和const不同,即可以直接初始化,也可以在构造函数中设置它的值。

    但是,如果是static字段,初始化必需在static构造函数中完成。

    this关键字

    this关键字在类中使用,是对当前实例的引用。

    索引

    和属性一样,索引不分配内存为存储

    索引和属性都主要被用来访问其它数据成员这些成员和它们关联,它们为这些成员提供设置和获取访问。

    和属性一样,索引可以只有一个访问器,也可以两个都有。

    索引总是实例成员,因此,索引不能声明为static。

    和属性一样,实现get和set访问器的代码不必一定要关联到某个字段或属性。这段代码可以做任何事情或什么也不做,只要get访问器返回某个指定类型的值即可。

    class Employee

    {

    public string LastName;

    public string Firstname;

    public string CityOfBirth;

    public string this[int index]

    {

    set

    {

    switch (index)

    {

    case 0: LastName = value;

    break;

    case 1: Firstname = value;

    break;

    case 2: CityOfBirth = value;

    break;

    default:

    throw new ArgumentOutOfRangeException("index");

    }

    }

    get

    {

    switch (index)

    {

    case 0: return LastName;

    case 1: return Firstname;

    case 2: return CityOfBirth;

    default:

    throw new ArgumentOutOfRangeException("index");

    }

    }

    }

    }

    当一个类中,有多个string和多个int想同时定义索引时,可以将索引定义为多个参数。

    分部类和分部类型

    用partial class的形式,声明分部类

    partial class MyClass

    {

    partial void PrintSum(int x, int y);

    public void Add(int x, int y)

    {

    PrintSum(x, y);

    }

    }

    partial class MyClass

    {

    partial void PrintSum(int x, int y)

    {

    Console.WriteLine("Sum is {0}", x + y);

    }

    }

    var mc = new MyClass();

    mc.Add(5, 6);

  • 相关阅读:
    设计模式03-工厂方法
    设计模式02-抽象工厂
    设计模式01-什么是设计模式
    工作流activiti-03数据查询(流程定义 流程实例 代办任务) 以及个人小练习
    工作流activiti-02事物控制、流程引擎创建
    工作流activiti-01个人小结
    jQuery.extend 函数详解
    hibernate框架学习之数据查询(QBC)
    hibernate框架学习之多表查询helloworld
    hibernate框架学习之数据查询(HQL)helloworld
  • 原文地址:https://www.cnblogs.com/pengjia89/p/3634934.html
Copyright © 2011-2022 走看看