zoukankan      html  css  js  c++  java
  • [AaronYang]C#人爱学不学[2]

    1. 记事本写C#,脱离vs

    新建记事本,名字为 helloworld.cs

    using System;
    
    namespace Hello{
        public class HelloWorldSay{
            static void Main(){
                Console.WriteLine("你好,世界");
                Console.ReadLine();
                return;
            }
        }
    }

    简单的使用csc命令编译:

    我的目录在:C:Program Files (x86)Microsoft Visual Studio 12.0Common7Toolsvsvars32.bat

    输入命令:csc /out: 输出目录及文件名(.dll或者.exe) 源代码文件

    csc /out:F:
    et2014年12
    月25日003728helloworld.exe F:
    et2014年12月25日003728helloworld.cs

    常用的还有csc /t:library  源代码文件      编译成dll

    csc /t:exe  源代码文件      编译成exe

    csc /t:module  源代码文件      

    csc /t:winexe  源代码文件     

    /r用来指定引用的dll

    源代码主入口文件可以是 *.cs表示编译文件夹下的所有cs文件

    或者生成xml文件-》 csc 源代码文件 /doc:路径+文件名.xml

    或者/main:指定哪个方法作为程序的入口点

    当然还有其他形式,不具体介绍了,虽然你看似没用,但是 举个实际案例:项目持续发布软件,都是自己拉取svn代码,然后自动编译,或者网页上开发人员自己点编译,现在觉得还没用吗?

    2.值类型和引用类型,拆箱与装箱我认为更好的解释,struct的局限

    这两种数据存储在内存的不同的地方。值类型存储在堆栈中,存储值,而引用类型存储在托管堆上,简称堆上,存储引用地址。

    拆箱与装箱的本质:值类型在转换到System.Object时引发的堆栈和堆的一系列的移动操作。装箱:值类型从堆栈上被复制到堆上,而拆箱时从堆上复制到堆栈上。所以对性能有影响

    下面看个 ay=null    说明 ay是个引用类型,表示它不引用任何对象

    除了众所周知的一些类型,重点讲下 struct 值类型 和class引用类型

    结构可以拥有属性和方法,但没有继承可言,结构可以重写System.Object的虚方法,但不能定义新的虚方法或者抽象方法。不能拥有无参构造函数,也不能为成员变量定义初始值。但性能好,class的功能更多。

    类和结构实际上是创建对象的模板。

    3.更了解CTS

     3.1列举一些值类型

      1.整型(从位数少到多排列 8,16,32,64)    有符号(sbyte,short,int,long)    无符号(byte,ushort,uint,ulong),它们每个都对应了CTS中的一个类型,例如long 对应System.Int64

      2.浮点(从位数少到多排列 32,64)  float(CTS:System.Single) 32位单精度浮点数     double(CTS:System.Double) 62位双精度浮点数,例如 float ay=12.3F,double ay1=12.3E2,E2代表10的指数是2,就是12.3乘以10的2次方

        decimal (CTS:System.Decimal) 128位高精度十进制数表示法,数字后面加M表示Decimal

      3.bool (CTS:System.Boolean)

      4.Char (CTS:System.Char) 16位的(Unicode)字符

      5.枚举Enum

    3.2列举一些引用类型

       object,string等

    这里的string很特殊,是个引用类型,比如2个string 同时引用一个string地址,当s1修改值时候,s2没有变化,因为修改一个字符串,就会创建一个全新的string对象,不信可以运行下面例子。string是比较特殊的引用类型,本质上是运算符重载的结果

      string s1 = "s1";
                string s2 = s1;
                Console.WriteLine(s1);
                Console.WriteLine(s2);
                s1= "newS1";
                Console.WriteLine(s1);
                Console.WriteLine(s2);
                Console.ReadLine();

    效果:

    4.C#跳转语句,除了break,continue,return还有goto

    goto 不只是跳转到指定标签,还可以用在switch case中,跳转到指定case里面

    跳标签的方式,这里不讲了。

    4.命名空间的 :: 双冒号(全局作用符)

    都知道可以 互相嵌套namespace,给namespace起别名操作,双冒号提下吧

    这里的::效果等同于 点号,但是我没说就是点号的替代品。

    4.C#的预处理器命令

    你肯定用过,例如 #region #endregion

    1. #define 和#undef      例如 #define DEBUG,经常与其他预处理器结合使用。

    2.同样C#还包括很多,例如#if #elif(等于 else if ) #else #endif,例如 #if DEBUG     #endif 表示 如果项目在DEBUG模式下,就执行下面的代码.

    3.#warning "警告测试"      #line    #pragma

    5.你可能不知道的 冒号方式调用带默认值的方法(.net framework4.0 +)

    6.属性中,是可以增加访问修饰符的

    7.静态构造函数的脾气

    static 类名{}  

    不能有访问修饰符,静态构造函数至多运行1次。即在代码引用类之前调用它。

    不能带参数,一个类也只能1个静态构造函数。只能访问类的静态成员,不能访问类的实例成员。

    他可以与无参数的构造函数共存。在静态构造函数里可以给外部的static readonly字段赋值

    构造函数提供了构造函数初始化器,使用this或者base调用。

    例如 public A(string des):base(des,4){}

    8. WeakReference弱引用与默认的强引用

    9. 本章跳过的部分的,你可能想了解的关键字:readonly和const、ref与out,部分类,深复制与浅复制(如果复制完类,如果类中引用了其他类,他只是一个地址,没有复制。最终复制完的对象的地址再返回),GC垃圾回收,C#4.0的拓展方法,这些常规的,没说了

  • 相关阅读:
    NFS-heartbeat-drbd模拟NFS高可用
    drbd
    hearbeat
    ldap
    SVN
    Nginx负载均衡
    shell-day1
    angularJS(二):作用域$scope、控制器、过滤器
    angularJS(一):表达式、指令
    nodejs、npm、 typescript、angular-cli安装
  • 原文地址:https://www.cnblogs.com/AaronYang/p/4183798.html
Copyright © 2011-2022 走看看