zoukankan      html  css  js  c++  java
  • C#基础——类型转换

     

           引子:类型转换在程序中是最常见的情形之一,在C#中有几种形式的类型转换,对于初学者来说,很多时候不知道如何选择哪种形式的类型转换,或者对每一种的形式的类型转换理解不透,不能够灵活运用。

          

           本文总结了C#中每种类型转换的特点和应用场合

           概述:常见的类型转换可分为自动类型转换和强制类型转换、不同类型之间的相互转换三类。当将小类型变量赋值为大类型变量时将发生自动类型转换;当将大类型变量赋值给小类型变量时必须使用强制类型转换;如果是不同类型之间的相互转换则需要用到一些方法来辅助完成。下面将详细介绍三种形式。

    1. 自动类型转换

    //基本数据类型之间的自动类型转换

    int i = 10;

    double d = i; //发生自动转换

     

    //引用数据类型之间的自动类型转换

        classPerson { }

        classStudent : Person { }

        Student stu = newStudent();

    Person person = stu; //发生自动转换

    1. 强制类型转换

      

    double d = 10;

    int i = (int) d; //发生强制转换,此处会丢失数据精度

     

    //引用数据类型之间的自动类型转换

        classPerson { }

        classStudent : Person { }  //Student 继承了Person类

        Person person = newStudent(); //父类引用指向子类对象

    Student stu = (Student)person; //发生强制转换

    //对于引用类型的强制转换还可以是as关键字来实现,如:

    Student stu = person asStudent; //发生强制转换

    1. 不同类型与string之间的相互转换

        1.字符串转换成基本数据类型

         int i = int.Parse("10");

         double d = double.Parse("10.5");

         bool b = bool.Parse("true");

         //注:很多初学者一直认为基本数据类型就像和Java一样,

         //其实C#的所有基本数据类型都是结构(struct)类型,在

         //C#中结构是允许有方法的,所有基本数据类型都有Parse方法

         //xx.Parse()只是这种类型转换的一种方式,

         //Convert类提供了很多更丰富的类型转换的方法,如:

         int i = Convert.ToInt32("10");

         bool b = Convert.ToBoolean("true");

         DateTime time = Convert.ToDateTime("2000-2-2");

        

         2.将原始值转换成string

         //统一用ToString()方法即可

         int i = 10;

         double d = 10.5;

         bool b = false;

         string si = i.ToString();

         string sd = d.ToString();

         string sb = b.ToString();

     

    1. as 类型转换与(xx)类型转换的区别

    Student stu = (Student)person;

    Student stu = person asStudent;

    以上两种方式都可实现类型的强制转换,但两者还是有很大的区别,主要有两点:

    1. as 只能用在引用数据类型的转换,而(xx)可用在引用类型和值类型
    2. as 在类型转换时如果转换不了将返回null值,而(xx)转换不了将直接报出异常(Exception)
  • 相关阅读:
    tailf、tail -f、tail -F三者区别(转)
    Jackson是线程安全的吗
    SecureCRT同时向多个终端发送命令
    SecureCRT设置和Xshell一样的快速命令集(使用快捷键输入命令和密码)
    SecureCRT配色方案
    Java中判断字符串是否为数字的方法
    MySQL错误:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL easonjim
    SecureCRT导出服务器列表或配置文件
    java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider.<init>()
    Badge
  • 原文地址:https://www.cnblogs.com/Wolfmanlq/p/2663601.html
Copyright © 2011-2022 走看看