首先我们要知道C#语言是一种面向对象的语言由C和C++演变而来,它依赖于.NET Framework。.NET Framework可以提供一个强大的代码库供其调用。之所以说C#语言依赖于.NET Framework是由于C#源代码只有经过编译器(指VS或VCE)的编译之后,变成CIL(Common Intermediate Language)通用中间语言。其实通常是我们常见的.exe或者.dll文件也叫作程序集。当我们运行.exe文件时,程序集将被CLR—公共语言运行时(Common Language Runtime)翻译为CPU的指令然后交由CPU完成。所以我们用C#只能编写托管环境下的代码(要受CLR控制)。学过JAVA的人可以把CLR理解为JAVA虚拟机,主要负责管理内存、处理安全性、垃圾回收、以及跨语言调试等。

   学习一门编程语言我们还要了解它的基本语法:关于语法大家只要有一本系统介绍C#语言的书大致都差不多。

1、关于显示转换和隐式转换

  隐式转换:类型A到B在所有情况下都可以进行,编译器自主进行转换。那么什么时候执行隐式转换呢?-只要类型A的取值范围完全包含在取值B中就可以执行隐式转换。

 

.net定义一个方法 .net基本语法_.net定义一个方法

.net定义一个方法 .net基本语法_取值范围_02

1              char str = 'a';
2              ushort newStr;
3              newStr = str;
4              Console.WriteLine("str {0}", str);
5              Console.WriteLine("newStr {0}", newStr);

隐式转换

 

输出结果:str  a

              newStr 97

此时编译器自动执行了隐式转换。ushort和char类型的取值范围都在0~65535之间,所以可以执行类型转换。

显式转换:微软在程序中为我们提供了显示转换相关的方法(Convert)。但要注意溢出问题,如果实际需要转换的A类型值超过了B类型的取值范围就会发生溢出,但系统默认不会报错,但是会造成数据丢失。可以通过chack方法进行检查。

.net定义一个方法 .net基本语法_.net定义一个方法

.net定义一个方法 .net基本语法_取值范围_02

short str = 285;
            byte newStr;
            newStr =Convert.ToByte(str);
            Console.WriteLine("str {0}", str);
            Console.WriteLine("newStr {0}", newStr);

显式转换

会报: 值对于无符号的字节太大或太小。

2  函数中的参数问题

首先注意函数调用时实参和形参要类型匹配。

c#允许指定一个(也只能是一个)特定的参数,必须是参数的最后一个用params修饰,称为参数数组。

.net定义一个方法 .net基本语法_.net定义一个方法

.net定义一个方法 .net基本语法_取值范围_02

static int sumVals(params int[] vals)
{
     int sum=0;
     foreach(int val in vals)
       {
            sum+=val;
       }
       return  sum;
}

求和函数

引用参数 ref 和 out

ref的特点是有进有出,即在传递参数之前就已经对它进行赋值,在传入方法体时,是将该数的地址传了进来,如果对其进行相应的赋值操作,直接改的是地址里的值,所以,当该方法执行完,该数的值也就跟着改变了。而out与ref的唯一区别是,在方法接收参数后,对它进行初始化(如果没有初始化,将会报错的),其余的用法都和ref一样。

ref 关键字使参数按引用传递,当执行调用方法时,在方法中对参数的任何更改都将反映在该变量中。学过C++可以类比引用。

.net定义一个方法 .net基本语法_.net定义一个方法

.net定义一个方法 .net基本语法_取值范围_02

class Ref
{
    static void refExample(ref int i)
    {
        i = 20;
    }

    static void Main()
    {
        int val = 0;
        refExample(ref val);
         Console.WriteLine(val);//此时打印出20
    }
}

引用参数

 

.net定义一个方法 .net基本语法_.net定义一个方法

.net定义一个方法 .net基本语法_取值范围_02

static void Main(string[] args)
        {
            int i ;
            Add( out i);
            Console.WriteLine(i);//结果输出11
        }
        static void Add(out int i)
        {
            i=10; //如果没有这个赋值,将会报错的
            i = i + 1;
        }

ref和out不同