一周学会C#(类一)

原创 2004年01月12日 17:14:00

一周学会C#(类一)

C#才鸟(QQ:249178521

1.类的声明<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

·       类是用户自定义的引用类型

class Pair

{

    public int X, Y; //公有变量名单词的首字母大写(PascalCase规则)

}

class Pair

{

    private int x, y; //非公有变量名第一个单词的首字母小写(camelCase规则)

}

class Pair

{

    int x, y; //缺省的访问修饰符是private

};//可以有结尾分号

你可以使用关键字class来声明类这一用户自定义的引用类型。类的语法和结构的非常类似。它提供函数、字段、构造函数、操作符和访问控制。类成员的缺省访问权限是private。当你定义类的成员名时,不要忘了对公有成员使用PascalCase规则,而对非公有成员使用camelCase规则。

类的声明中虽然可以使用结尾分号,但建议你不要使用,这只不过是为了照顾C++程序员的习惯。

2.对象的产生

·        一个类的局部变量存在于栈(stack)中

w       不是被预先赋值的

w       可以被初始化为null或调用构造函数进行初始化

(下面的例子中Pair类的声明请看前面,右边显示的是内存中的情况,@表示指向)

           

static void <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Main()                 

{

    Pair p;                          p ?

}

static void Main()               

{

    Pair p = null;                 p null

}

static void Main()

{

    Pair p = new Pair();         p @               0  .X

}                                                      0  .Y

 

虽然类的声明和结构的声明非常类似,但类与结构是两个不同的类型。结构是值类型,而类是引用类型。无论类的实例多大,类的局部变量只是这个类实例的一个引用。

上面例子中的最上面的那段程序定义了一个Pair类的局部变量p。不管Pair类包含什么成员,p只是存在存在于栈中的一个引用。因为p没有被初始化,所以这个引用没有被赋值,p也就不能被使用。

上面例子中的中间的那段程序定义了一个Pair类的局部变量pp被初始化为null,所以p没有指向任何对象。p已经被赋值,所以p也就能被使用。

上面例子中的最下面的那段程序定义了一个Pair类的局部变量p。由new新生成一Pair类对象,这个新产生的对象产生在堆(heap)中,然后p通过赋值指向这一堆中的对象,而p是被定义为存在于栈中。p已经被赋值,所以p也就能被使用。

new对于类来说是产生一堆中的对象,而对于结构来说是在栈中产生一个值,这可能需要一段时间的适应。

3.对象的构造函数

·       类的构造函数!=结构的构造函数

w       编译器声明缺省构造函数

w       你可以声明缺省构造函数

w       如果你声明构造函数,那么编译器不会声明构造函数

class Pair

{

}

//编译器声明一缺省构造函数

class Pair

{

    public Pair()

    { ... }

}

//正确,可以自己声明缺省构造函数

class Pair

{

    public Pair(int x, int y)

    { ... }

}

//正确,但编译器声明的缺省构造函数不存在,不存在缺省构造函数

类的缺省构造函数的规则与结构的缺省构造函数的规则是不同的。你可以回忆一下,结构总有一编译器声明的公有的缺省构造函数。不管你有没有声明构造函数,编译器声明的公有的缺省构造函数总是存在的。所以你不能定义缺省构造函数,这样会出现两个缺省构造函数,这是不允许的。

但这只适合于结构,对于类是不适用的。如果你没有声明任何构造函数,那编译器会产生缺省构造函数。但如果你定义了一个构造函数,那么编译器就不会产生缺省构造函数。这也意味着如果你声明了一个或多个构造函数,那么你能拥有缺省构造函数的唯一途径是你声明的构造函数中必须有一个是缺省构造函数。这样的结果是如果你只定义了一非缺省构造函数,而你又要使用缺省构造函数的话,那你只有重载这个构造函数。如果你必须手动初始化类中的每一个字段(就像在结构中一样),那将是非常麻烦的。但幸运的是你可以不必这么做,你将在下面看到这一点。

4.:this(…)

·        一个构造函数可以调用另一构造函数

sealed class Pair

{

    public Pair(int x, int y)

        : this(x, y, Colour.Red)

    {

    }

 

    public Pair(int x, int y, Colour c)

    {

        ...

    } 

    ...

    private int x, y;

    private Colour c;

}

 

 

一周学会C#

5.布尔型操作符1.赋值  =  2.等于  ==  != 3.逻辑  ! && ||  ^ & | INT TENS  = (9 * 6) / 13; INT UNITS = (9 * 6) % 1...
  • simonamen
  • simonamen
  • 2009年09月15日 10:00
  • 119

一周学会Linux实战

为什么学习Linux? 1、Linux的性能卓越。 Linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多中型,大型甚至是巨型项目都在使用Linux。很多软...
  • ahuang1900
  • ahuang1900
  • 2014年07月26日 01:39
  • 592

div+css学习笔记(十天学会div+css)

1.CSS伪类可以改变链接的样式 2.在 CSS 定义中,a:hover 必须位于 a:link 和 a:visited 之后,这样才能生效! 在 CSS 定义中,a:active 必须位于 a:...
  • u011445367
  • u011445367
  • 2015年03月31日 20:18
  • 449

一周学会C#(类三)

一周学会C#(类三)C#才鸟(QQ:249178521)8.常量字段·        常量字段... w       隐含为static w       必须在声明时初始化w       必须被初始化...
  • zhf7878
  • zhf7878
  • 2004年01月12日 17:16
  • 737

一周学会C#(类二)

一周学会C#(类二)C#才鸟(QQ:249178521)5.实例字段·        实例字段... w        在所有的构造函数中被初始化为缺省值(0/false/null)w        ...
  • zhf7878
  • zhf7878
  • 2004年01月12日 17:15
  • 710

一周学会C#(属性一)

一周学会C#(属性一)C#才鸟(QQ:249178521)1.    问题原始的封装是麻烦的struct Time {     ...     public int GetHour()     {  ...
  • zhf7878
  • zhf7878
  • 2004年01月12日 17:12
  • 851

一周学会C#(索引一)

一周学会C#(索引一)C#才鸟(QQ:249178521)1.[]·       索引提供[ ] 类的语法 w       总是一个实例成员,可以是虚拟的 w       没有ref/out 参数st...
  • zhf7878
  • zhf7878
  • 2004年01月12日 17:12
  • 677

一周学会C#(语句一)

一周学会C#(语句一)C#才鸟(QQ:249178521)1. 语句·          语句 w        声明语句 w        表达式语句 ·        块 w        是语句...
  • zhf7878
  • zhf7878
  • 2004年01月12日 17:11
  • 1179

一周学会C#(枚举一)

一周学会C#(枚举一)C#才鸟(QQ:249178521)1.类型·       值类型 w       变量直接包含它们自己的数据 w       局部变量总是放在栈(stack)中 ·      ...
  • zhf7878
  • zhf7878
  • 2004年01月12日 17:12
  • 1183

一周学会C#(结构一)

一周学会C#(结构一)C#才鸟(QQ:249178521)1.结构的声明·       结构是用户自定义的值类型struct Pair {     public int X, Y; //公有变量名单词...
  • zhf7878
  • zhf7878
  • 2004年01月12日 17:12
  • 828
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一周学会C#(类一)
举报原因:
原因补充:

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