• C#高级编程笔记 Day 1, 2016年8月 30日 名词定义


    1、C# 中的命名空间 namespace,我觉得和Java中的package 差不多,相当于一个"包" 一样。

    2、修饰符 static 修饰方法表示方法不能在类的实例化上执行,因此不必先实例化再调用。

     1  1 namespace XiYin{
     2  2       public class TestStatic{
     3  3            public static void Main(strig[] args){
     4  4                  int i=0;
     5  5                   int j=getValue(i);
     6  6                   return 0;
     7  7           }  
     8  8           public static int getValue(int i){
     9  9                return i+1;
    10 10           }    
    11 11       }
    12 12  }

    3、变量的初始化,C#中编译器需要用初始值对变量进行初始化。

      C#中有两个方法可确保变量在使用前进行了初始化。

    1. 变量是类或结构中的字段,如果没有显式初始化,创建这些变量时其默认值就是 0
    2. 方法的局部变量必须在代码中显示初始化,之后才能在语句中使用它们的值。此时,初始化不是在声明该变量时进行的,但编译器会通过方法检查所有可能的路径。如果检测到局部变量在初始化前就使用了他们的值,就会产生错误。

    4、const关键字指定一个变量为常量。

    1 const int a=10;

      必须在声明时初始化。不能更改。而且总是静态的。(static)

    5、C#中的数据类型: 分为 值类型 和引用类型

      值类型: 直接存储值,一般存放在堆栈中。

      引用类型:存储对值得引用,一般放在托管堆上。

    6、如果变量是一个引用,就可以把其值设置为null,表示不引用任何对象。

    7、C# 中的转义字符。

    转义序列 字符
    \'  单引号
    \" 双引号
    \\ 反斜杠
    \0
    \a 警告
    \b 退格
    \f 换页
    \n 换行
    \r 回车
    \t 水平制表符
    \v 垂直制表符

    8、C#中两种预定义的引用类型。

    名称 CTS类型 说明
    object System.Object 根类型,CTS中的其他类型都是从它派生而来的(包括值类型)
    string  System.String Unicode 字符串

    9、string 类型: string 对象被分配在堆上,而不是栈上。当把一个字符串变量赋予另一个字符串时,会得到对内存中同一字符串的两个引用。字符串是不可改变的,修改其中一个字符串,就会创建一个全新的string 对象,而另一个字符串不发生任何改变。等到程序运行结束,垃圾回收器 (Garbage Collection)判断已经没有程序使用时,进行回收。释放。

      

    1 string str1 = "123";
    2 string str2 = "4450";
    3 string str3 = str2;
    4 str1="789";

    10、为了避免有时在字符串中 字符的自动转义 。可在字符串前加 ” @ "

    string filePath = @ "C:\ProCsharp\css" ;

    11、【实用】编译 .cs 文件 成 .dll 文件的步骤过程。(在Windows 命令行中使用)

      ①、将 包含方法的 .cs 文件 比如 test.cs 文件编译为 test.dll 文件

    csc /t :library test.cs

      ②然后再来一个 cs 比如 runtest.cs 这个是用来 调用之前 test.cs 中的方法。在第一步已经把其编译为 test.dll。 所以下面是把 runtest.cs 附件 test.dll 并运行即可得到结果。

    csc runtest.cs /r: test.dll

    12、【预处理指令】两条较有用的预处理指令。

      #warning 和 #error ,当编译器遇到它们时,分别产生警告或错误 。 如果编译器遇到 #warning 指令, 会给用户显示 #warning 指令后面的文本。之后编译继续进行。如果遇到#error 指令,就会给用户显示后面的文本,作为一条编译错误信息。然后会立即退出编译,不会生成 IL代码。

    13、【实用】给方法传递参数。(参数的传递)

      参数可以通过引用或通过值传递给方法,在C#中,除非特别指定。所有的引用类型都是通过引用传递,所有的值类型都是通过值来传递。因为引用类型的变量只包含对象的引用,将要复制的正是这个引用,而不是对象本身,所以对底层对象的修改会保留下来。相反,值类型的对象包含的是实际数据,所以传递给方法的是数据本身的副本。例如:int 通过值传递给方法,对应方法对该int 的值所做的任何改变都没有改变原 int 对象的值。

    14、ref 参数 和 out 参数

      ref 参数迫使值参数通过引用传递给方法。对变量改变都会影响原数据。

      例子:

    1 public static void SomeFunction(int[] ints,ref int i){
    2   ints[0]=100;
    3   i=100;         
    4 }

      在调用该方法时,添加 ref 关键字。

    1 public static void Main(string[] args){
    2   int[] a={1,2,3};
    3   int i=0;
    4   SomeFunction(a,ref i);      
    5 }

      C#要求对传递给方法的参数进行初始化,在传递给方法之前,无论是按值传递,还是按引用传递,任何变量都必须初始化。但是 out 参数似乎可以解决这个。

      out参数:可以使一个变量未初始化传入函数而在函数中进行初始化

      编译器使用 out关键字来初始化。在方法的输入参数前面加上 out 前缀时,传递给该方法的变量可以不初始化。改变量通过引用传递。所以在被调用的方法中返回时,对应方法对该变量的任何改变都会保留下来。

      

      【总结:】

      ref 和 out 关键字在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。

    class Test{
      public void getName(ref int i){
        
      }
      public void getName(out int i){
    
      }    
    }

      从编译角度来看,这两个方法是完全相同的,所以不会进行重载。

      但是下面这个可以。

    1 class Test{
    2   public void getName(int i){ }
    3   public void getName(ref int i){ }
    4   //public void getName(out int i){ } The same as up 
    5 }
  • 相关阅读:
    QT下载速度慢的解决方法
    第七章 多态
    第六章 重复运用class
    第五章 隐藏实现细节
    代码改变世界
    第四章 初始化和清理
    第三章 控制程序流程
    module.exports和exports
    如何与外部源交互
    实现POST服务器
  • 原文地址:https://www.cnblogs.com/xiyin/p/5853908.html
Copyright © 2020-2023  润新知