C#核心编程结构(二)

3 c#核心编程

  1. Main()
    c#要求所有的程序逻辑都包含在一个类型定义中,Program类中的Main()方法作为程序的入口点。
    Program类也称作应用程序对象,一个可执行程序可以有多个应用程序对象,但必须指定具体的入口点。
    Environment: get environment info
  2. Console
Console.WriteLine("os {0}, cd {1}, ld {2}, is 64 {3}, machine name {4}", Environment.OSVersion, Environment.CurrentDirectory,
                Environment.GetLogicalDrives()[0], Environment.Is64BitOperatingSystem, Environment.MachineName);
  1. 数据类型
    object类派生的类型: Type, String, Array, Exception, Delegate, ValueType
    ValueType类型的派生是结构或枚举,不是类
    System.ValueType重载System.Object定义的虚方法。来实现值类型对值操作,复制或传递等数据类型ValueValue

  2. string: System.String
    字符串拼接: +
    逐字字符串: @
    相等性: string是引用类型,但是相等性操作符被定义为比较字符串对象的值
    字符串是不可变的: 每一次字符串修改是分配了新的字符串
    StringBuilder: System.Text
    调用stringbuilder的成员都是直接修改对象内部的字符数据。

  3. checked关键字: 检查数据溢出的情况
    unchecked: 禁止溢出抛出异常

            byte b1 = 100;
            byte b2 = 250;
            //without checked is 94
            //checked is 
            byte sum = checked((byte)(b1 + b2));
            Console.WriteLine("add byte 100 + 250 is {0}", sum);
  1. var: 隐式局部类型 用来创建隐式类型的本地变量而不必指定具体的数据类型。编译器将自动推断实际的数据类型。
    var不是关键字,因为我们可以将之作为变量,参数的名字,但var标记与数据类型时,编译器视之为关键字。
    可以用var表示任何类型,包括数组和泛型类型及自定义类型
    局限:
    1,只能用于方法或属性范围的本地变量, 不能定义返回值,参数或自定义类型的字段。
    2,必须赋初值,且不能为null.因为null不能判断实际的数据类型
    3,强类型,在编译时确定数据类型后将不再进行改变
    4,多与linq查询结合使用

  2. 迭代结构
    for 循环关键值只在循环域中可见
    foreach 适合线性逐项遍历某个集合,不能向前或间隔等。集合可以是任何实现IEnumerable接口的类。
    while 执行语句知道满足某个终止条件
    while()
    {}
    do
    {}while();

  3. 条件结构
    if/else 只能用于布尔表达式,不能用于-1/0这样的值
    布尔表达式一旦被确定为false,其他的表达式就不会再被检查
    switch
    switch(number/string/enum)
    {
    case XX: {}; break;

    default;
    }

4 编程结构

  1. 参数修饰符
    默认 按值传递,调用者的原始值和被调用方法的变量之间的值互相不影响
    out 按引用传递,输出参数由被调用方法赋值
    ref 按引用传递,调用者赋初值,关键字行为根据参数是值类型还是引用类型有区别

    按值传递引用类型: 被调用方法中可以修改对象的状态数据,但不能改变对对象的引用
    按引用传递引用类型: 被调用方法中可以修改对象的状态数据,也可以改变对对象的引用
    

    params 参数数组

    将一组可变数量的相同类型的参数作为单独的逻辑参数传递。能且只能是最后一个参数有params修饰符
    static double Cal(params double[] values)
    1, Cal(1.2,2.2,3.3); 2, double[] data = {1,2.2,3,3,3,3}; Cal(data); 3, Cal().
    

    可选参数
    方法调用者不指定不必要的参数,而是使用参数的默认值。
    但是,可选参数的值必须在编译时确定且必须位于方法签名的最后。DataTime.Now的值在运行时确定

    static double DefalutParam(string name, string param = "default param");
    DefalutParam("name"); DefalutParam("name","optional");
    

    命名参数
    允许在调用方法时乱序指定参数的值

    static void DisplayFancyMessage(ConsoleColor textColor = ConsoleColor.Blue,
    ConsoleColor backgroundColor = ConsoleColor.White,
    string message = "Test Message"){...}
    DisplayFancyMessage(message: "example");
    

    重载
    一组名字相同,但是参数类型或是数量不同的方法。

  2. 数组
    是一组相同数据类型(int, string, class)的数据点
    var 隐式语法分配数组,初始化列表中每一项的类型应该是相同的
    多维数组:矩形数组, 交错数组: 数组的上界不同
    System.Array

    Sort Algorithm(windows)
    内省排序法  IntroSort()
         <=3 swap 1/2,1/3,2/3
         3< <16  插入排序法 InsertionSort()
         Log2\N > 0 先采用快速排序法 PickPivotAndPartition()
         Log2\N = 0 再使用堆排序法 HeapSort()
    
  3. 枚举类型 enumeration
    enum: 自定义的名/值对的数据类型
    enumerator: 实现了IEnumerable的类或结构
    enum EmpType { Low=10, Medium, Large} // 11,12,13
    enum EmpType { Low=10, Medium=13, Large=15}
    低层存储 enum EmpType:byte { Low=10, Medium=13, Large=15}
    System.Enum
  4. 结构类型 struct
    C#的new关键字会调用默认的构造函数,并且给每个字段赋默认值
    结构类型的构造函数必须为每一个字段赋值
  5. 值类型和引用类型
    System.ValueType重载System.Object定义的虚方法。来实现值类型对值操作,复制或传递等
    值类型复制后,两个变量的操作是独立的
    引用类型复制后,都指向同一块内存,相互之间互相影响
    包含引用类型的值类型 值类型中一旦包括了引用类型属性,引用类型属性字段会指向同一块内存,其他值类型属性字段的值仍然是互相独立的。
    按值传递引用类型: 被调用方法中可以修改对象的状态数据,但不能改变对对象的引用
    按引用传递引用类型: 被调用方法中可以修改对象的状态数据,也可以改变对对象的引用
  6. 可空类型
    数值数据类型(char, bool)都是值类型,一旦实例化自动有默认值(0,”,false), 所以值类型不会有值null
    可空数据类型是值类型后加”?”, 定义域中增加null
    ?实际是创建一个泛型System.Nullable, 提供了一组可空变量类型可以使用的成员集合, 派生自struct
    局部可空变量必须赋一个初始值或是null才能使用,null == null => true
    ?? 可空类型赋值。 if(!a.HasValue) a = true;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值