C#学习笔记(隐式和显式转换)

文章目录

  • 前言
  • 一、隐式转换
  • 二、显式转换
    • C#之Convert.ToInt32()和int.Parse()的区别
  • 三、异常处理try、as


前言

对显式隐式转换的学习,以及try 、as、Convert.ToInt32()和int.Parse()的区别的学习


一、隐式转换

namespace Djf_C_xuexi_Project
{
    class Program
    {
        static void Main(string[] args)
        {
            //隐式转换(一般是大范围装小范围)
            int i = 10;
            long l = i;
            //隐式转换(子类->基类)也称为向上转型,无法使用子类特有的方法
            C1 c1 = new C2();
            c1.nihao();
            c1.nihao2();//报错!!!
            //和正常子类的区别
            C2 c2 = new C2();
            c2.nihao();
            c2.nihao2();
        }

        class C1 {
            public void nihao() {
                Console.WriteLine("111");
            }
        }

        class C2 : C1 {
            public void nihao2()
            {
                Console.WriteLine("222");
            }
        }

    }
}

一般是大范围装小范围,自动转换。

二、显式转换

代码如下(示例):

namespace Djf_C_xuexi_Project
{
    class Program
    {
        static void Main(string[] args)
        {

            double a = 10.05;
            double b = 10.035;
            string c = "35";
            string d = "35.06";
            //浮点型->整形
            int i = (int)a;
            Console.WriteLine(i);//i=10     
            //浮点型->字符串型
            Console.WriteLine(a.ToString());//a=10.05
            //浮点型->字符串型(保留两位小数)
            Console.WriteLine(b.ToString("f2"));//b=10.03
      
            //string c=35;
            Console.WriteLine(Convert.ToInt32(c));//c=35
            Console.WriteLine(int.Parse(c));//c=35
            //double b=10.035  string d="33.25"
            Console.WriteLine(Convert.ToInt32(b));//b=10
            Console.WriteLine(int.Parse(d));//报错 输入字符串的格式不正确

            Console.WriteLine(Int32.Parse(c));//c=35
            Console.ReadLine();

            int num = 0;
            bool f = int.TryParse("123", out num);
            //如果字符串可转换成int类型的参数,则返回true,输出num;否则,返回false,num为0
        }
    }
}

C#之Convert.ToInt32()和int.Parse()的区别

1、Convert.ToInt32()是将继承于object类的对象转换成int;

int.Parse()只能将String类的对象转换成int,即括号中的数据类型只能是String类型

2、对NULL值得处理:Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常

3、当括号中得数据类型为double型时:

(1)Convert.ToInt32(double value),如果value为3.5,转换后为4;value为4.5,转换后还是4;value为5.5,转换后为6。也就是说,当value为double型时,返回相邻两个整数中为偶数的那一个。

(2)在int.Parse(value) 中,如果value为double型,直接报错:“输入字符串的格式不正确”.

4、Parse就是把参数类型为String的转换成int,char,double…等,即*.Parse(string value),value一定要是string 类型的,否则会报错!!!

Convert可以提供多种类型的转换,即Convert.*(value) 中对value类型没有限制。

补充:
int.TryParse(string s,out param)是一个实现参数转换的方法,其返回值为bool类型。

示例:

int number = 0;
bool b = int.TryParse( “123”, out number );
//如果字符串可转换成int类型的参数,则返回true,输出number;否则,返回false,number为0

此处原文链接为:https://blog.csdn.net/Kevin_Sun777/article/details/109584433

三、异常处理try、as

代码如下(示例):

namespace Djf_C_xuexi_Project
{
    class Program
    {
        class C1 {    }//基类
        class C2 : C1 {     }//派生类
        static void Main(string[] args)
        {
            C1 c1 = new C1();
            C2 c2 = (C2)c1;//报错(无法将类型为“C1”的对象强制转换为类型“C2”)
            Console.WriteLine(c2);
            Console.ReadLine();
           //处理异常的方式
            try
            {
                //可能出现异常的语句
                C2 c22 = (C2)c1;
            }
            catch (Exception e)
            {
                Console.WriteLine( e.Message);
                //报错(无法将类型为“C1”的对象强制转换为类型“C2”)
            }
            //as把c1转换成C2这个类型  如果出错 就将C22置为null
             C2 c23 = c1 as C2;
             Console.WriteLine(c23==null);//输出true
             Console.ReadLine();
             //as 的使用更为高效相对于try而言,其只适用于引用类型和非空类型
        }
    }

}

你可能感兴趣的:(C#学习笔记,c#,学习,开发语言)