C# 第一节

一、 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 = 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 = @"";

用户自定义引用类型有: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 = 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# 第一节)