码迷,mamicode.com
首页 > 其他好文 > 详细

变量与类型转换

时间:2015-01-21 13:17:20      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:

变量声明(不允许重复声明)的语法:类型 + 变量名,如

void Main()
{
    int num;
    string name;
}

 

变量声明时,可以采用隐式局部变量:var

需要在声明时赋值,声明后类型固定,如

void Main()
{
    var num = 12;
    var name = "derek";
    
    Console.WriteLine (num);
    Console.WriteLine (name);
}

同时,使用var可以声明一些临时变量(匿名类型:只读),如

void Main()
{
    var myVar = new{Name="derek",Num=12};
    Console.WriteLine (myVar.Name);
    Console.WriteLine (myVar.Num);
}

 

变量赋值:注意类型匹配,赋值前是不允许使用的,因为C#使用的是强类型识别系统(RTTI)

未赋值直接使用时:

技术分享

 

使用字面值为变量赋值:

void Main()
{
    int num;
    string name;
    
    num = 12;
    name = "derek";
    
    Console.WriteLine (num);
    Console.WriteLine (name);
}

使用表达式为变量赋值:

void Main()
{
    var myVar = DateTime.Now.ToLongDateString();
    var fullName = "lastName" + " " + "firstName";
    Console.WriteLine (myVar);
    Console.WriteLine (fullName);
}

使用变量为变量赋值:

void Main()
{
    var firstName = "ramm";
    var lastName = "derek";
    var fullName = firstName + lastName;
    Console.WriteLine (fullName);
}

常量:(静态常量:const,动态常量:readonly)

const用于项目运行过程中不变化的值,readonly允许在初始化中赋值,作为只读对象访问

比如圆周率,养老保险比例等,可以声明为const

void Main()
{
    const double PI = 3.14;
    
    Console.WriteLine ("请输入半径");
    double radius = Convert.ToDouble(Console.ReadLine());
    Console.WriteLine ("您输入的的半径是:{0}", radius);
    
    Console.WriteLine ("圆周长:{0},面积:{1}",2 * PI * radius, PI * radius * radius);
}

readonly通常用于只读操作,比如连接字符串等,readonly不允许修饰方法内的局部变量

void Main()
{
    var da = new SqlDataAdapter("select * from Book",connectionString);
    var ds = new DataSet();
    da.Fill(ds);
    ds.Dump();
}

//定义数据库连接字符串
readonly string connectionString = @"Data Source=.;Initial Catalog=BookStoreDB;Integrated Security=True";

常见变量命名错误(具体解决办法,参考开发工具给出的错误提示)

  1. 命名不正确(比如使用系统关键字)
  2. 变量没有声明就使用
  3. 变量没有赋值就使用
  4. 声明了重复的变量名
  5. 变量赋值时类型不一致

类型转换:隐式(从小范围向大范围转换,从子类向父类转换)和显式转换

显式转换:  

  1. 基本数据类型转换:Convert
    Convert.ToDateTime("2010-1-1 18:22:33").Dump();
  2. 字符串转基本类型:Parse()方法
    Console.WriteLine (decimal.Parse("123.456").ToString("C"));
  3. 对象转字符串类型:ToString()方法
    Console.WriteLine (123.456M.ToString("C"));
    Console.WriteLine (DateTime.Now.ToString("D"));

关于类型转换的关键字:

  判断类型:is

void Main()
{
    Console.WriteLine (123 is string);
    Console.WriteLine ("123" is string);
    Console.WriteLine (true is string);
    Console.WriteLine (true is object); }

  强制类型转换:()   转换失败时抛出异常(LINQ Pad实现)

void Main()
{
    var book = Books.First();
        
    var price = (decimal)book.Price;
    var pubDate = (DateTime)book.PubDate;
    price.Dump();
    pubDate.Dump();
}

  强制类型转换:as  转换失败时返回null

void Main()
{
    Person s = new Student();
    Person t = new Teacher();
    
    var p1 = s as Teacher;
    var p2 = s as Person;
    var p3 = t as Teacher;
        
    p1.Dump();
    p2.Dump();
    p3.Dump();
}
class Person{}
class Student : Person{}
class Teacher : Person{}

 

上面的代码涉及到了另一个问题:装箱(值类型->引用类型)和拆箱(引用类型->值类型)

其中装箱:

object obj = 123;

其中拆箱:

void Main()
{
    object obj = 123;        //装箱
    int num = (int)obj;        //拆箱
}

频繁装箱和拆箱会影响性能(涉及到堆栈的内存分配),

但是装拆箱的目的其实是提高代码(尤其是方法参数)的灵活性

 

变量与类型转换

标签:

原文地址:http://www.cnblogs.com/rammderek/p/4238527.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!