C#速成(之三)

原创 2003年08月29日 07:38:00

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

修饰符

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

你必须已经知道publicprivateprotected这些常在C++当中使用的修饰符。这里我会讨论一些C#引入的新的修饰符。

 

readonly(只读)

readonly修饰符仅在类的数据成员中使用。正如这名字所提示的,readonly 数据成员仅能只读,它们只能在构造函数或是直接初始化操作下赋值一次。readonlyconst数据成员不同,const 要求你在声明中初始化,这是直接进行的。看下面的示例代码:

 

class MyClass

{

    const int constInt = 100;    //直接初始化

    readonly int myInt = 5;      //直接初始化

    readonly int myInt2;     //译者注:仅做声明,未做初始化

   

    public MyClass()

    {

        myInt2 = 8;              //间接的

    }

    public Func()

    {

        myInt = 7;               //非法操作(译者注:不得赋值两次)

        Console.WriteLine(myInt2.ToString());

    }

   

}

 

sealed(密封)

密封类不允许任何类继承,它没有派生类。因此,你可以对你不想被继承的类使用sealed关键字。

 

sealed class CanNotbeTheParent

{

    int a = 5;

}

 

unsafe(不安全)

你可使用unsafe修饰符来定义一个不安全的上下文。在不安全的上下文里,你能写些如C++指针这样的不安全的代码。看下面的示例代码:

 

public unsafe MyFunction( int * pInt, double* pDouble)

{

    int* pAnotherInt = new int;

    *pAnotherInt  = 10;

    pInt = pAnotherInt;

    ...

    *pDouble = 8.9;

}

 

 

 

 

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

interface(接口)

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

 

如果你有COM方面的概念,你会立亥明白我要谈论的内容。一个接口就是一个抽象的基类,这个基类仅仅包含功能描述,而这些功能的实现则由子类来完成。C#中你要用interface关键字来定义象接口这样的类。.NET就是基于这样的接口上的。C#中你不支持C++所允许的类多继承(译者注:即一个派生类可以从两个或两个以上的父类中派生)。但是多继承方式可以通过接口获得。也就是说你的一个子类可以从多个接口中派生实现。

 

using System;

interface myDrawing

{

    int originx

    {

        get;

        set;

    }

    int originy

    {

        get;

        set;

    }

    void Draw(object shape);

}

 

class Shape: myDrawing

{

    int OriX;

    int OriY;

 

    public int originx

    {

        get{

            return OriX;

        }

        set{

            OriX = value;

        }

    }

    public int originy

    {

        get{

            return OriY;

        }

        set{

            OriY = value;

        }

    }

    public void Draw(object shape)

    {

        ...    // do something

    }

   

    // class's own method

    public void MoveShape(int newX, int newY)

    {

    .....

    }

   

}

 

 

 

 

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

Arrays(数组)

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

 

C#中的数组比C++的表现更好。数组被分配在堆中,因此是引用类型。你不可能访问超出一个数组边界的元素。因此,C#会防止这样类型的bug。一些辅助方式可以循环依次访问数组元素的功能也被提供了,foreach就是这样的一个语句。与C++相比,C#在数组语法上的特点如下:

 

方括号被置于数据类型之后而不是在变量名之后。

创建数组元素要使用new操作符。

C#支持一维、多维以及交错数组(数组中的数组)。

 

示例:

 

    int[] array = new int[10];              // 整型一维数组

    for (int i = 0; i < array.Length; i++)

        array[i] = i;

 

    int[,] array2 = new int[5,10];          // 整型二维数组

    array2[1,2] = 5;

 

    int[,,] array3 = new int[5,10,5];       // 整型的三维数组

    array3[0,2,4] = 9;

 

    int[][] arrayOfarray = = new int[2];    // 整型交错数组(数组中的数组)

    arrayOfarray[0] = new int[4];

    arrayOfarray[0] = new int[] {1,2,15};

 

 

 

 

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

索引器

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

 

索引器被用于写一个访问集合元素的方法,集合使用"[]"这样的直接方式,类似于数组。你所要做的就是列出访问实例或元素的索引清单。类的属性带的是输入参数,而索引器带的是元素的索引表,除此而外,他们二者的语法相同。

 

示例:

 

注意:CollectionBase是一个制作集合的库类。List是一个protected型的CollectionBase成员,储存着集合清单列表。

class Shapes: CollectionBase

{

    public void add(Shape shp)

    {

        List.Add(shp);

    }

 

    //indexer

    public Shape this[int index]

    {

        get {

            return (Shape) List[index];

        }

        set {

            List[index] = value ;

         }

     }

}

C# 自动生成三层架构中的Model层.cs类方法

由于开发ERP项目,有时候需要很多表,且表的字段比较多,写Model非常耗时,所以自己网上抄了一些资料,勉强写了一个自动生成代码的工具,现在分享主要技术点给大家参考,欢迎指正: 1、连接数据库 2...
  • u011871201
  • u011871201
  • 2017年01月02日 17:10
  • 1430

菜鸟级三层框架(EF+MVC)项目实战之 系列一 EF零基础创建领域模型

系列概述:全系列会详细介绍抽象工厂三层的搭建,以及EF高级应用和 ASP.NET MVC3.0简单应用,应用到的技术有Ef、Lambda、Linq、Interface、T4等。 由于网上对涉及到的技术...
  • judyge
  • judyge
  • 2015年10月31日 16:30
  • 2515

快速排序的优化--三数取中法

//*********************三数取中法(快排的优化)**************************** //未优化|我们总是把数组尾元素固定为key的值,然后通过调整让key...
  • asd7486
  • asd7486
  • 2016年07月03日 21:00
  • 1440

GITHUB自学系列之三「GIT 速成」

版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!!前面的 GitHub 系列文章介绍过,GitHub 是基于 Git 的,所以也就意味着 Git 是基础,如...
  • zhoucheng05_13
  • zhoucheng05_13
  • 2016年10月16日 21:25
  • 178

C#高级编程(中文第七版)六部分之三

  • 2011年07月24日 11:05
  • 18MB
  • 下载

c#图解教程(之三)

  • 2010年08月27日 13:13
  • 10MB
  • 下载

C#多线程之三:解决多线程编程中大并发数等待唤醒的问题

 在移动交通流调查项目的一个算法分析程序中,碰到一个业务问题:用户采集上传的基站定位数据需要进行分析预处理,方案是先按预定格式解析文件并从中提取出成百上千个基站定位数据记录,并合并相同的基站点,...
  • cxzhq2002
  • cxzhq2002
  • 2014年10月20日 10:39
  • 774

MATLAB.NET混合编程之三~~从C#向Matlab的数据类型转化

C#中常用的基本类型有int、double、string、bool、Byte等,matlab中的基本类型有double、single、int32、char、struct等等。C#里面的数据类型就算是和...
  • zwjabcd
  • zwjabcd
  • 2016年02月14日 15:19
  • 4470

细谈在C#中读写Excel系列文章之三

在第二篇文章中我已经向大家详细介绍了Excel 2007以后版本的文件的OpenXML结构。所谓的OpenXML结构从本质上来讲其实就是一个ZIP压缩包,所有基于OpenXML数据结构的文件都一样。这...
  • baomihua21
  • baomihua21
  • 2013年04月18日 09:17
  • 690

C#编程利器之三:接口(Interface)

C#编程利器之三:接口(Interface)
  • lhm1019
  • lhm1019
  • 2017年03月02日 14:53
  • 428
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#速成(之三)
举报原因:
原因补充:

(最多只允许输入30个字)