0379-800888006

网站建设 APP开发 小程序

软件开发

您当前位置>主页 > 软件开发 >

C#学习日志之数据类型

发表时间:2018-07-12 17:59:45

文章来源:未知

浏览次数:0

  数据类型:

  一、值类型

  1、整数类型:sbyte(有符号8位)、byte(无符号8位)、short(有符号16位)、ushort(无符号16位)、int(有符号32位)、uint(无符号32位)、long(有符号64位)、ulong(无符号64位)。

  2、浮点类型:float(单精度)、double(双精度)。

  3、小数类型:decimal(128位)。在定义时,需在数字后加"m"或"M",如decimal d=1.255m。

  4、布尔类型:bool(true/false)。

  5、字符类型:char(16位)。

  6、枚举类型:enum(与c++中类似)。

  7、结构类型:struct(与c++中类似)

  注:在c#中,这些数据类型被定义在不同的命名空间。如"sbyte",即有别名"System.Sbyte",意味着在命名空间System中有对该数据类型的定义,所以要使用这些数据类型必须在文件开头声明"using System",即把该命名空间引入。其中,小数类型与浮点类型的不同之处在于它的精度 更高,float的精度为7位数,double的精度为15~16位,而decimal有29位的精度。并且,decimal与float、double之间没有隐式转换。

  二、引用类型

     1、类

  关键词:class

  类的数据成员:常量、域、事件。

  类的函数成员:方法、属性、索引指示器、运算符、构造函数,析构函数。

  c#类的一些特性:

  属性——这里的含义与c++或java中的略有不同,在c++或java中,这是数据成员的另一种称呼,在c#中却有另外的含义。有过c++或者java等编程经历的同学可能会遇到一种情况,类中某个数据成员既允许被访问又允许被修改(即有自定义的set和get两种成员函数去修改或访问它),其实在编程中这样的情况还是常见的,因此c#专门设计了类的属性简化操作。如下:

  class A{

  private int aa;

  public int Aa{

  get{

  return aa;

  }

  set{

  aa=value;

  }

  }

  }

  定义完成后,我们就可以通过下面操作get或set aa:

  class option

  {

  public static void Main(){

  A a=new A();

  p.Aa=125; //set aa的值为125

  Console.WriteLine(p.Aa);         //get到aa

  }

  }

  属性的声明可以只包含set或get中的任一个。

   一些特殊的类:

  object类:object类是所有类型的基类,c#中所有类型都是直接或间接从object类继承而来的。它被定义在命名空间System中,因此有别名System.Object。有如此特性:对于任何一个object变量,均可以赋以任何类型的值。

  string类:专门用于对字符串进行操作。

  注:关于类的具体内容留待后面学习中另做文章补充。

  2、委托

  关键词:delegate

  委托也称代表,相当于c#中的指针原型,与指针不同,委托是安全的。在声明委托时,只需要指定委托指向的原型类型即可。如果我们声明了一个委托,即对System.delegate做了一个扩展。如实例中,既可以委托静态方法,也可以委托非静态方法。

  委托声明原型举例: delegate string MyDelegate();

  实例:

  delegate string MyDelegate();

  class Person

  {

  public string Mydg_Normal()

  {

  return "非静态委托调用";

  }

  public static string Mydg_Static()

  {

  return "静态委托调用";

  }

  }

  class Program

  {

  static void Main(string[] args)

  {

  Person p = new Person();

  MyDelegate myDelegate = new MyDelegate(p.Mydg_Normal);

  Console.WriteLine(myDelegate());

  myDelegate = new MyDelegate(Person.Mydg_Static);

  Console.WriteLine(myDelegate());

  Console.ReadKey();    //使控制台在按任意键后退出

  }

  }

  输出:

  非静态委托调用

  静态委托调用

  3、数组

  数组的声明

  一维数组:int[] numners=new int[5];

  多维数组:string[,] names=new string[5,4];    //可以理解为5行4列二维数组

  数组的数组(交错数组):

  byte[][] scores=new byte[5][];

  for(int x=0;x<scores.Length;x++)

  {

  score[x]=new byte[x+1];

  }        //byte类型数组的默认值为0

  注:每种类型的数组基本上都有默认值,引用类型的数组默认值为null,可以声明为不分配内存的形式,但使用前必须初始化。

  数组初始化

     一维数组:int[] numbers=new int[5]{1,2,3,4,5};

  或者不指定数组大小——int[] numbers=new int[]{1,2,3,4,5};

  或者省略new——int[] numbers={1,2,3,4,5};

  多维数组:int[,] numbers=new int[3,2]{{1,2},{3,4},{5,6}};

  或者不指定数组大小——int[,] numbers=new int[,]{{1,2},{3,4},{5,6}};

  或者省略new——int[,] numbers={{1,2},{3,4},{5,6}};

  交错数组:int[][] numbers=new int[2][]{new int[]{2,3,4},new int[]{5,6,7,8,9}};

  或者不指定数组大小——int[][] numbers=new int[][]{new int[]{2,3,4},new int[]{5,6,7,8,9}};

  或者省略new——int[][] numbers={new int[]{2,3,4},new int[]{5,6,7,8,9}};

  三、装箱和拆箱

  int i=123;

  object box=i;    //装箱完毕

  int j=(int)box;    //拆箱完毕

  用途:与"is"条件判断关键词连用,可以依据对象类型,作出不同的操作。如下:

  public void function(object obj)

  {

  if(obj is int)

  {

  Console.WriteLine("obj是整型的");

  }

  else if (obj is char)

  {

  Console.WriteLine("obj是整型的");

  }

  else if (obj is long)

  {

  Console.WriteLine("obj是长整型的");

  }

  else if (obj is Person)        //Person是自定义类型

  {

  Console.WriteLine("obj是Person类型的");

  }

  }

  四、数据类型转换

  隐式转换——一种安全的类型转换。在值类型中,由低字节的类型向相同字节或高字节的类型转换,且一般遵循“有符号向有符号转换,无符号既可以转换为有符号又可以转换为无符号”的规则。

  举例:

  byte b = 1;

  short us = b;    //无符号字节类型转换为有符号短整型

  float f = 1.0f;

  double d = f;    //单精度转换为双精度

  显示转换——又叫强制类型转换。可强制使高字节类型向低字节类型转换,有可能会产生溢出。

  举例:

  int ii = 2000;

  byte ib = (byte)ii;    //4字节的整数类型向1字节的字节类型(最大值255)转换,发生溢出,最后结果为208。

  float f = 1.0f;

  decimal d = (decimal)f;    //单精度浮点数向小数类型转换

 
  希望能为您带来帮助,更多详情请继续关注我们洛阳微信营销