美文网首页
C# 第一节

C# 第一节

作者: allen151 | 来源:发表于2019-11-21 19:28 被阅读0次

    一、 Console类的一些方法:
    1、Console.Write(); 输出不换行
    2、Console.WriteLine(); 输出并换行
    3、Console.ReadLine(); 读取键盘输入的所有字符,返回字符串。按下回车键退出
    4、Console.Read(); 读取键盘输入的第一个字符,返回其对应的ASCII值。按下回车键退出
    5、Console.ReadKey(); 等待用户按下任意键并执行退出,(此函数的作用是为了在控制台窗口停留一下,直到用户敲击键盘为止。不然运行时,"Hello World!" 这句话会在控制台窗口一闪而过,没法查看。)
    二、 创建C#项目:

    编译 & 执行 C# 程序
    如果您使用 Visual Studio.Net 编译和执行 C# 程序,请按下面的步骤进行:

    启动 Visual Studio。
    在菜单栏上,选择 File -> New -> Project。
    从模板中选择 Visual C#,然后选择 Windows。
    选择 Console Application。
    为您的项目制定一个名称,然后点击 OK 按钮。
    新项目会出现在解决方案资源管理器(Solution Explorer)中。
    在代码编辑器(Code Editor)中编写代码。
    点击 Run 按钮或者按下 F5 键来运行程序。会出现一个命令提示符窗口(Command Prompt window),显示 Hello World。
    您也可以使用命令行代替 Visual Studio IDE 来编译 C# 程序:

    打开一个文本编辑器,添加上面提到的代码。
    保存文件为 helloworld.cs。
    打开命令提示符工具,定位到文件所保存的目录。
    键入 csc helloworld.cs 并按下 enter 键来编译代码。
    如果代码没有错误,命令提示符会进入下一行,并生成 helloworld.exe 可执行文件。
    接下来,键入 helloworld 来执行程序。
    您将看到 "Hello World" 打印在屏幕上。

    引用类型(Reference types)

    引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。

    换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。内置的 引用类型有:object、dynamic 和 string。

    对象(Object)类型

    对象(Object)类型 是 C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。Object 是 System.Object 类的别名。所以对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。

    当一个值类型转换为对象类型时,则被称为装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱

    object obj;
    obj = 100; // 这是装箱
    

    动态(Dynamic)类型

    您可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。
    声明动态类型的语法:
    dynamic <variable_name> = value;
    例如:dynamic d = 20;
    动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。

    字符串(String)类型

    字符串(String)类型 允许您给变量分配任何字符串值。字符串(String)类型是 System.String 类的别名。它是从对象(Object)类型派生的。字符串(String)类型的值可以通过两种形式进行分配:引号和 @引号。
    例如:String str = "runoob.com";

    一个 @引号字符串:@"runoob.com";

    C# string 字符串的前面可以加 @(称作"逐字字符串")将转义字符(\)当作普通字符对待,比如:string str = @"C:\Windows";
    等价于:string str = "C:\\Windows";
    @ 字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内。

    string str = @"<script type=""text/javascript"">
        <!--
        -->
    </script>";
    

    用户自定义引用类型有:class、interface 或 delegate。我们将在以后的章节中讨论这些类型。

    指针类型(Pointer types)

    指针类型变量存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针有相同的功能。

    声明指针类型的语法:

    type* identifier;
    例如:

    char* cptr;
    int* iptr;
    

    我们将在章节"不安全的代码"中讨论指针类型。

    C#数据类型的转换

    隐式转换

    隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。
    例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。

    强制转换

    会造成精度丢失

    double d = 3257.55 ;
    int i ;         
    //强制将double类型转换成为in类型
    i = (int)d ;
    
    int i = 75 ;
    Console.WriteLine(i.ToString());
    Console.ReadKey();
    

    接受来自用户的值

    System 命名空间中的 Console 类提供了一个函数 ReadLine(),用于接收来自用户的输入,并把它存储到一个变量中。
    例如:

    int num;
    num = Convert.ToInt32(Console.ReadLine());
    

    函数 Convert.ToInt32() 把用户输入的数据转换为 int 数据类型,因为 Console.ReadLine() 只接受字符串格式的数据。

    定义常量

    常量是使用 const 关键字来定义的 。定义一个常量的语法如下:

    const <data_type> <constant_name> = value;
    下面的代码演示了如何在程序中定义和使用常量:

    using System;
    
    public class ConstTest 
    {
        class SampleClass
        {
            public int x;
            public int y;
            public const int c1 = 5;
            public const int c2 = c1 + 5;
    
            public SampleClass(int p1, int p2) 
            {
                x = p1; 
                y = p2;
            }
        }
    
        static void Main()
        {
            SampleClass mC = new SampleClass(11, 22);
            Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);
            Console.WriteLine("c1 = {0}, c2 = {1}", 
                              SampleClass.c1, SampleClass.c2);
        }
    }
    

    当上面的代码被编译和执行时,它会产生下列结果:

    x = 11, y = 22
    c1 = 5, c2 = 10
    

    不能用实例来引用常量,需要通过类名来引用

    算术运算符

    + - * /取整 %取余 前自增 后自增

    位运算

    ^这个运算符,将两个数转成2进制,位与位对齐,对比,如果同样写0,如果不同样写1。
    如:

    A = 0011 1100
    B = 0000 1101
    -----------------
    A^B = 0011 0001
    

    ~这个符号,将0变成1,1变成0

    A = 0011 1100
    ----------------------
    ~A  = 1100 0011
    

    switch 语句的语法 **default **

    switch(expression){
        case constant-expression  :
           statement(s);
           break; 
        case constant-expression  
           statement(s);
           break; 
      
        /* 您可以有任意数量的 case 语句 */
        default : /* 可选的 */
           statement(s);
           break; 
    }
    
    • 不是每一个 case 都需要包含 break。如果 case 语句为空,则可以不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
    • C# 不允许从一个开关部分继续执行到下一个开关部分。如果 case 语句中有处理语句,则必须包含 break 或其他跳转语句。
    • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。我试了必需才行
    • C# 不支持从一个 case 标签显式贯穿到另一个 case 标签。如果要使 C# 支持从一个 case 标签显式贯穿到另一个 case 标签,可以使用 goto 一个 switch-case 或 goto default。

    C# 封装

    C# 封装根据具体的需要,设置使用者的访问权限,并通过访问修饰符来实现。

    一个访问修饰符定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:

    • public:所有对象都可以访问;
    • private:对象本身在对象内部可以访问;
    • protected:只有该类对象及其子类对象可以访问
    • internal:同一个程序集的对象可以访问;
    • protected internal:访问限于当前程序集或派生自包含类的类型。

    参数传递

    数值传递

    public void swap(ref int x, ref int y){ }
    static void Main(string[] args){
      NumberManipulator n =new NumberManipulator();
      /* 局部变量定义 */
      int a = 100;
      int b = 200;
      /* 调用函数来交换值 */
      n.swap(ref a, ref b); //引用调用,只有一个地址,一改两个地方都改了
    }
    

    按输出传递参数

    return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。

    public void swap( out int x){
      int temp = 5 ;
      x = temp ;
    }
    int a = 100 ;
    Console.WriteLine("转换前,a的值:{0}", a);//100
    n.swap(out a);
    Console.WriteLine("转换后,a的值:{0}", a);//5
    

    可以将变量通过传递给方法的方式赋值

    相关文章

      网友评论

          本文标题:C# 第一节

          本文链接:https://www.haomeiwen.com/subject/uvcqictx.html