第一章 C#数据类型

1值类型

1.1 整数类型

  sbyte 有符号8位整数

  byte 无符号8位整数

  short 有符号16位整数

  ushort 无符号16位整数

  int 有符号32位整数

  uint 无符号32位整数

  long 有符号64位整数

  ulong 无符号64位整数

1.2 字符类型

  包括单个字母、数字、标点符号,其它控制字符

  表示字符用单引号,如果是双引号,为字符串(string)类型

  char x=‘a';

  char a='中‘;

  转义符:

  \' 单引号

  \"双引号

  \\斜杠

  \0 空字符

  \a 感叹号

  \b 退格

  \f  换页

  \n 换行

  \r 回车

  \t 水平tab

  \v 垂直tab

1.3实数类型

float 32位单精度实数

double 64位双精度实数

decimal 128位十进制实数

1.4 bool类型

ture false

1.5 结构类型

结构类型的成员类型没有限制,可以是简单值类型,也可以是结构类型、枚举类型,还可以是各种引用类型

using System;

namespace P3_4
{
    public class StructSample
    {
        public static void Main()
        {
            Contact c1;
            c1.m_name="Wang Gang";
            c1.m_age=35;
            c1.m_telephone="未知";
            c1.m_address.m_city="恩施";
            c1.m_address.m_street="航空路";
            c1.m_address.m_number=2506;
            Console.WriteLine(c1.m_address.m_city);
            Console.WriteLine(c1.m_address.m_street);
            Console.WriteLine(c1.m_address.m_number);
        
        }
        struct Contact
        {
            public string m_name;
            public int m_age;
            public string m_telephone;
            public struct Address
            {
                public string m_city;
                public string m_street;
                public int m_number;
            }
            public Address m_address;
        }
    }
}

1.6 枚举类型

    public class EnumSample
    {
        public static void Main()
        {
            Weekday w1;
            w1 = Weekday.Monday;
            Console.WriteLine(w1);
            w1 = w1 + 1;
            Console.WriteLine(w1);
            w1 = (Weekday)4;
            Console.WriteLine(w1);
        }
        enum Weekday
        {
            Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
        }
    }
View Code

 

2 引用类型

包括 类class、接口interface、代表delegate、数组array

2.1 类

对于值类型,每个变量直接包含自身的所有数据,每创建一个变量,就在内存中开辟一个区域;而对于引用类型,每个变量只存储对目标数据的引用,每创建一个变量,就增加一个指向目标数据的指针。

View Code

输出结果:

修改结构变量后:
李明
20
修改类变量后:
张三
25
请按任意键继续. . .

2.2 接口

类是对一组具有相同性质的对象的抽象,接口是对一组能够提供相同服务的类的抽象。类对程序中的各个对象进行分组,接口则对程序中的各个类进行分组。如果一个类同时继承了接口和其它的类,基类写在前面,接口写在后面。

interface ITelephone
{
  void DialNumber();
}
interface IFax:ITelephone
{
  void SendFax();
  void ReceiveFax();
}
interface INetwork
{
  void Chat();
  void SendMail();
  void ReceiveMail();
}
class Colleague:Contact,IFax
{
  public void SendFax()
  {
  }
  ...
}

C#中的类不支持多继承,不允许一个派生类继承多个基类。只有在类和接口之间可以实现多继承。

class C:IA,IB

类和接口之间的继承存在传递关系。从技术上说,接口是一组包含了函数型方法的数据结构。

如果多个接口定义了相同的方法成员,而某个类型又同时继承了这些接口,那么在派生类中可以用一个方法来加以实现

public interface IA
{
    void F();
}
public interface IB
{
    void F();
}
public class C:IA,IB
{
    public void F()
    {
        //
    }
}

如果希望加以区分的话,就要加上接口声明进行区别,这时方法的定义中也不能包括访问限制修饰符。

public class C:IA,IB
{
    void IA.F()
    {
        //
    }
    void IB.F()
    {
        //
    }
}

2.3 代表

代表类似C和C++等编程语言中的函数指针,用于封装某个方法的调用过程。

delegate int D1(string text);
delegate void TelDelegate();

代表的实例化使用关键字new进行,同时还需要指定封装的方法

TelDelegate td=new TelDelegate(c1.Dianumber);

实例 :

View Code

2.4 数组

2.4.1 一维数组

int [] array1;
int [] array1 = new int[3];
int [] array1 = new int []{1,2,3};
int [] array1= {1,2,3}

以上定义都是合法的,数组元素为值类型时,数据直接放在数组中。数组元素为引用类型时,数组中存放的只是各个对象的地址。

2.4.2 多维数组

int [,] a = new int[3,4]

3 类型转换

3.1 数值转换

从低精度到高精度可以进行隐式转换;而从高精度类型到低精度类型必须显示转换

int i=20;
long j=100;
j=i;
i=(int)j;

3.2 枚举转换

只能把0这个值直接赋给枚举类型的变量,不存在枚举类型与其它任何类型的隐式转换。

和枚举类型相关的显式转换包括:

a、从所有整数类型(字符)和实数类型到枚举类型

b、从枚举类型到所有整数类型(字符)和实数类型

c、从枚举类型到枚举类型

    class EnumConversion
    {
        static void Main()
        {
            Weekday day = 0;
            Console.WriteLine(day);
            day = (Weekday)1;//day=1;是错误的写法
            Console.WriteLine(day);

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

3.3 引用转换

类之间,类与接口,接口之间,代表之间,数组之间

3.3.1 隐式引用转换

只要B从A中继承,就存在从B到A的隐式转换。

数组之间的隐式转换还要满足以下要求: A1和A2维数相同、A1和A2的元素都是引用类型、存在着从A1数组元素类型向A2数组元素类型的隐式引用转换

下面的代码都是合法的:

Contact c=new Contact();
ITelephone iTel=c;
IFax iFax=null;
iTel=iFax;

3.3.2 显式引用转换

任何从基础类型向派生类型的转换都要求使用显示引用转换。

数组之间的显示转换还要满足以下要求: A1和A2维数相同、A1和A2的元素都是引用类型、存在着从A1数组元素类型向A2数组元素类型的隐式引用转换

下面例子使用了隐式和显式引用转换

    class ReferenceConversion
    {
        static void Main()
        {
            Contact c = new Contact();
            c.m_name = "李四";
            c.m_age = 20;
            c.m_telephone = "010-88888888";

            ITelephone[] iTels = new ITelephone[3];
            Contact[] cons = new Contact[3];
            cons[0] = new Contact();

            iTels[0] = c;
            cons[0] = (Contact)iTels[0];
            iTels = cons;
            cons[0].DialNumber();
        }
    }

3.4 装箱和拆箱转换

值类型和引用类型之间的转换,就要用到Boxing和Unboxing

3.4.1 装箱转换

值类型到引用类型的隐式转换称为装箱转换(Boxing)

    class BoxingSample
    {
        static void Main()
        {
            int i = 10;
            object obj = i;
            i = 20;
            Console.WriteLine("i={0}", i);
            Console.WriteLine("obj={0}", obj);
        }
    }

i=20
obj=10


3.4.2 拆箱转换

从引用类型到值类型的显式转换

    class UnboxingSample
    {
        static void Main()
        {
            object obj = 10;
            int i = (int)obj;
            i = 20;
            Console.WriteLine("i={0}", i);
            Console.WriteLine("obj={0}", obj);
        }
    }

i=20

obj=10

 

posted @ 2014-11-25 11:32  boywg  阅读(169)  评论(0编辑  收藏  举报