知识点。

throw throw ex的区别 

https://blog.csdn.net/zunguitiancheng/article/details/9006703

从上面的的调用中可以看出来,throw 能够指定到具体的存在问题的代码位置,而throw ex 不能,你只能知道在这个 try,catch中存在逻辑或者调用出现了问题。

Uint :无符号类型,不能是负数的值。

ViewStatehttps://www.cnblogs.com/yintian2/archive/2007/07/25/831287.html

dynamic (动态类型)https://www.cnblogs.com/qianxingdewoniu/p/5595828.html

C#  访问修饰符区别https://blog.csdn.net/weixin_43267344/article/details/100924565

IL:中间语言

IDE: 集成开发环境

   例如:vs2010,vs2012

C#、.NET Framework、CLR的关系:https://blog.csdn.net/lidandan2016/article/details/77868043

const: 原文链接:https://blog.csdn.net/yiyelanxin/java/article/details/72461257

一、const关键字限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。
1.用于修改字段或局部变量的声明,表示指定的字段或局部变量的值是常数,不能被修改。
2.常数声明的类型指定声明引入的成员类型。常数表达式必须产生具有目标类型或可隐式转换为目标类型的值。
3.常数表达式是在编译时可被完全计算的表达式。因此不能从一个变量中提取值来初始化常量。
(如果const int a = b + 1; b是一个变量,显然不能在编译时就计算出结果,所以常量是不可以用变量来初始化的。)
4.常数声明可以声明多个常数。

public const double x = 1.0, y = 2.0, z = 3.0;

5.不允许在常数声明中使用static修饰符。
6.常数可以参与常数表达式。如:

public const int c1 = 5;
public const int c2 = c1 + 100;

二、readonly允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值。
1.readonly是在计算时执行的,所以它可以用某些常量初始化。
2.readonly是实例成员,所以不同的实例可以有不同的常量值,这使readonly更灵活。

三、const(静态常量)与readonly(动态常量)区别
1.const字段只能在该字段的声明中初始化;

readonly字段可以在声明或构造函数中初始化,因此,根据所使用的构造函数,readonly字段可能具有不同的值。 

2.const字段是编译时常量,而readonly字段可用于运行时常量。

public static readonly uint a1 = (uint)datetime.now.ticks; 

3.const默认就是静态的,而readonly如果设置成静态的就必须显示声明。
4.const对于引用类型的常数,可能的值只能是string和null。readonly可以是任何类型。 

运算符 ^ 

有面试过一个console.writeLin(7^ 2)的 没有答对,琢磨之后

7的二进制是 0111

2的二进制是 0010

根据  ^ 是指按位异或

           1和1为0

           1和0为1

           0和0为0

所以得出来的应该是 0101 为5

 out (输出传递参数)和ref(引用传递参数) 的区别就是在于 

ref 传递变量之前(变量必须初始化)要是个已经赋值的参数,out可以不需要

ref 传递之后在方法体内可以选择性重新赋值,out 必须要赋值

int a = 10;
int b = 20;
Console.WriteLine(valuetype.GetValue(ref a, ref b));
valuetype.GetValues(out a, out b);
Console.WriteLine("{0},{1}",  a, b);

params (参数数组)用法补充:

  •  1.带 params 关键字的参数类型必须是一维数组,不能使用在多维数组上;
  •  2.不允许和 ref、out 同时使用;
  •  3.带 params 关键字的参数必须是最后一个参数,并且在方法声明中只允许一个 params 关键字。
  •  4.不能仅使用 params 来使用重载方法。
  •  5.没有 params 关键字的方法的优先级高于带有params关键字的方法的优先级

 案例

ParamArray param = new ParamArray();
Console.WriteLine(param.AddElements(12, 23, 34));

 class ParamArray
    {
        public int AddElements(params int[] arr)
        {
            int sum = 0;
            foreach (int i in arr)
            {
                sum += i;
            }
            return sum;
        }
    }

结构体 

定义

 struct Books
    {
        public string title;
        public string author;
        public string subject;
        public int book_id;
    };

调用

  Books books; 
  books.author = "作者";
  Console.WriteLine(books.author); 
  //会报错,不New时,字段要被赋值 
  Console.WriteLine(books.book_Id);
  • 结构可带有方法、字段、索引、属性、运算符方法和事件
  • 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函数。无参构造函数(默认)是自动定义的,且不能被改变。
  • 与类不同,结构不能继承其他的结构或类。
  • 结构不能作为其他结构或类的基础结构。
  • 结构可实现一个或多个接口。
  • 结构成员不能指定为 abstract(抽象)virtual (虚方法)protected(保护访问,只限于本类和子类访问,实例不能访问)。
  • 当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
  • 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。

类 vs 结构

类和结构有以下几个基本的不同点:

  • 类是引用类型,结构是值类型。
  • 结构不支持继承。
  • 结构不能声明默认的构造函数。

构造函数

定义

class ParamArray
{
   public string Name { get; set; }
     public  ParamArray()
     {
          this.Name = "zhang";
     }
} 

 调用时:这里我并没有对Name 重新赋值,运行后还是输出 "zhang",说明它是在 对象创建时执行,它没有任何返回类型

 ParamArray param=new ParamArray(); 
 Console.WriteLine(param.Name);

析构函数,在名字前加  ~,析构函数是在程序结束时执行,一般时候析构函数里面写的都是一些资源回收之类的东西.

class ParamArray
{        
        ~ParamArray()
        {
            this.Name = "sss";
        }
}

 静态类,就是指类前面加(static)关键字

static class ParamArray
{
}

1:静态类不能包含析构函数

2:静态类中定义构造函数不能加访问修饰符,比如public,private

3:静态类中定义的方法,属性必须是静态方法

 public static string GetElements(string str)
  {
     return str = "hollow";
  }

 C# 方法默认访问级别 : private 
C# 类默认访问级别 : internal

posted @ 2020-04-10 11:25  没有狐狸的南墙  阅读(249)  评论(0编辑  收藏  举报