ITPub博客

首页 > 应用开发 > IT综合 > C#速成(之二) (转)

C#速成(之二) (转)

原创 IT综合 作者:amyz 时间:2007-11-25 11:12:30 0 删除 编辑
C#速成(之二) (转)[@more@]

-------------------
数据类型
-------------------

所有C#数据类型都派生自基类object。这里有两类数据类型:

基本型/内置型 用户自定义型

下面一个C#内置类型列表:

类型 字节数 解释 byte 1 无符号字节型 sbyte 1 有符号字节型 short 2 有符号短字节型 ushort 2 无符号短字节型 int 4 有符号整型 uint 4 无符号整型 long 8 有符号长整型 ulong 8 无符号长整型 float 4 浮点数 double 8 双精度数 decimal 8 固定精度数 string unicode字串型 char unicode字符型 bool 真假布尔型

 

注意:C#当中的类型范围与C++有所不同;例如,C++的long型是4个字节,而在C#当中是8个字节。同样地,bool型和string型都不同于C++。bool型只接受true和false两种值。不接受任何整数类型。



用户定义类型包括: 

类类型(class)

结构类型(struct)

接口类型(interface)


数据类型的内存分配形式的不同又把它们分成了两种类型: 

值类型(Value Types)

引用类型(Reference Types) 

值类型:


值类型数据在栈中分配。他们包括:所有基本或内置类型(不包括string类型)、结构类型、枚举类型(enum type)

 

引用类型:

引用类型在堆中分配,当它们不再被使用时将被垃圾收集。它们使用new运算符来创建,对这些类型而言,不存在C++当中的delete操作符,根本不同于C++会显式使用delete这个运算符去释放创建的这个类型。C#中,通过垃圾收集器,这些类型会自动被收集处理。

引用类型包括:类类型、接口类型、象数组这样的集合类型类型、字串类型、枚举类型

枚举类型与C++当中的概念非常相似。它们都通过一个enum关键字来定义。

 

示例:

enum Weekdays
{
  Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday
}



类类型与结构类型的比较

除了在内存分配形式上外,类与结构的概念完全与C++相同。类的对象被分配在堆中,并且通过new来创建,结构也是被new创建但却被分配在栈当中。C#当中,结构型适于快速访问和拥有少量成员的数据类型。如果涉及量较多,你应该创建一个类来实现他。

(译者注:这与堆和栈内存分配结构的特点有关。简而言之,栈是一种顺序分配的内存;堆是不一定是连续的内存空间。具体内容需要大家参阅相关资料)

示例:

struct Date
{
  int day;
  int month;
  int year;
}

class Date
{
  int day;
  int month;
  int year;
  string weekday;
  string monthName;

  public int GetDay()
  {
  return day;
  }

  public int GetMonth()
  {
  return month;
  }

  public int GetYear()
  {
  return year;
  }

  public void SetDay(int Day)
  {
  day = Day ;
  }

  public void SetMonth(int Month)
  {
  month = Month;
  }

  public void SetYear(int Year)
  {
  year = Year;
  }

  public bool IsLeapYear()
  {
  return (year/4 == 0);
  }

  public void SetDate (int day, int month, int year)
  {

  }
...
}

 

-------------------
属性
-------------------

如果你熟悉C++面象对象的方式,你就一定有一个属性的概念。在上面示例当中,以C++的观点来看,Data类的属性就是day、month和year。用C#方式,你可以把它们写成Get和Set方法。C#提供了一个更方便、简单、直接的方式来访问属性。

因此上面的类可以被写成:

using System;
class Date
{
  public int Day{
  get {
  return day;
  }

  set {
  day = value;
  }
  }

  int day;

  public int Month{

  get {
  return month;
  }

  set {
  month = value;
  }
  }

  int month;

  public int Year{

  get {
  return year;
  }

  set {
  year = value;
  }
  }

  int year;

  public bool IsLeapYear(int year)
  {
  return year%4== 0 ? true: false;
  }

  public void SetDate (int day, int month, int year)
  {
  this.day = day;
  this.month = month;
  this.year = year;
  }

}


你可在这里得到并设置这些属性:

class User
{

  public static void Main()
  {
  Date date = new Date();
  date.Day = 27;
  date.Month = 6;
  date.Year = 2003;
  Console.WriteLine("Date: {0}/{1}/{2}", date.Day,
  date.Month,
  date.Year);
  }
}


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-984616/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3984
  • 访问量
    7363882