反射程序集程序集是由编译器编译得到的,供进一步编译执行的中间产物,在WINDOW系统中,它一般表现为后缀为.dil(库文件)或者是.exe(可执行文件)的格式。简单来说就是我们写的代码集合,我们写的所有代码都会被翻译器翻译为一个代码集供人使用,比如一个代码库或者一个可执行文件。
元数据元数据就是描述数据的数据这个概念不仅仅用于程序上,在别的领域也有使用。简单来说,程序中的类,类中的函数,函数中的变量就是元数据,有关程序以及类型的数据被称为元数据。它们保存在程序集中
反射程序正在运行时,可以查看其他程序集或者自身的元数据,一个运行的程序产肯本身或者其他程序的元数据行为就是反射。简单来说就是,在程序运行时,通过反射可以得到其他程序集和或者自己程序集代码的各种信息,实例化它们,执行它们,操作它们。
反射的作用因为反射可以在程序编译后获得信息,所以它提高了程序的拓展性和灵活性。
程序运行时得到所有元数据,包括元数据的特征
程序运行时,实例化对象,操作对象
程序运行时创建新对象,用这些对象执行任务。
语法Type12345678910111213141516171819202122class ...
委托和事件委托委托是什么委托是函数的容器,可以理解为表示函数的变量类型,用来储存、传递函数。委托的本质是一个类,用来定义函数的类型,不同的函数必须对应和各自格式一致的委托。
语法123访问修饰符默认不写是publicpublic delegate 返回值 委托名(参数列表);一般写在namespace语句块中
定义123delegate void MyFun();public delegate int MyFun2(int x);//定义了一个规则,并没有使用。//委托规则的声明不允许重名
使用自定义委托委托变量是函数的容器
12345678910111213141516MyFun f = new MyFun(Fun);//只能存储f.Invoke();//执行函数MyFun f2 = Fun;f2();MyFun f3 = Fun2;int x = f3(114514);static void Fun(){ }static int Fun2(int x){ return x;}
委托常用:作为类成员;作为函数的参数
123456789101 ...
本篇章内容知识偏多,因此分三次上传。
简单数据结构类ArrayListArrayList的本质ArrayList是一个C#为我们1封装好的的类,本质是一个object类型的数组,ArrayList类帮助我们实现很多方法,比如数组的删减查改。
申明12using System.CollectionsArrayList array = new ArrayList();
增删查改123456789101112131415161718array.Add(1);//增array.AddRange(array2);//范围增加(批量增加1)array.Remove(1);//从头找,找到删array.Insert(1,"1234567");///插入array.RemoveAt(2)//删除某一位置的元素array.Clear();//清空arrary[0];//表示第几个元素if(array.Contains("bababoi")){ //判断有无元素,有则进入,无则不进入}int idx;idx = array.IndexOf(tr ...
面向对象编程概念面向过程编程是一种以过程为中心的编程思想。
面向对象编程是一种对现实世界理解和抽象的编程方式,把相关的数据和方法组织成一个整体来看待,从更高层次来进行程序开发。更贴近事物的自然运行模式。
用通俗易懂的大白话说就是万物皆为对象:用程序来抽象形容对象,用面向对象的思想来编程
为什么要学习面向对象编程
提高代码复用率
提高开发效率
提高程序可拓展性
清晰的逻辑关系
面向对象三大特征学习 类 (class)
封装 + 继承 + 多态
封装:用程序语言来形容对象。
继承:复用封装对象的代码;儿子继承父亲,复用现成代码
多态;同样行为的不同表现,儿子继承父亲的基因但是有不同的行为表现。
面向对象七大原则开闭原则、依赖倒转原则、里氏替换原则、单一职责原则、接口隔离原则、合成复用原则、迪米特法则。
面向对象——封装类和对象什么是类具有相同特征,具有相同行为,一类事物的抽象,类是对象的模板,关键词:class
声明类一般申明再namespace语句块里。
12345678910class xxx{ //特征——成员变量 //行为——成员方法 //保护特征——成员属性 // ...
复杂数据类型一般是多个数据集合在一起构成的数据。
枚举是一个被命名的整型常量的集合
基本结构123456enum E_xxx{ x1, x2, x3,}
枚举中如果没有赋值的话式默认自动上升序列
在哪里声明在namespace结构块里声明(常用)。也可以声明在class和struct结构块里。但是不可以在函数语句块里声明。
枚举的使用虽然枚举的声明在函数外,但是使用枚举仍然在函数里。
例如:
1E_xxx xxx = E_xxx.x1;
由于枚举是一个常量集合,因此他与swich高度适配。
枚举的类型转换基本遇不到,如果遇到就直接强转。
string转枚举
1xxx = (E_xxx)Enum.Parse(typeof(E_xxx), "x2");
一维数组数组的声明1int[] arr1;
1int[] arr2 = new int[5];
1int[] arr3 = new int[5]{ 1, 2, 3, 4, 5};
1int[] arr4 = new int[]{1, 2, 3, 4} ...
基础结构基本的代框架与之前接触的c++相似,C#代码也是有属于他自己的框架。大体可以将代码分成 四个部分 :引用命名空间、 命名空间、 类、 函数 。
用一个通俗易懂的方法来解释就是,可以把引用命名空间认定为引用一个工具包,类似可以看作c++中的头文件。
命名空间就可以理解成我们自己创造的一个以工程名为名字的工具包。
类就可以理解成工具包里的工具,这个也是默认你的工具包名字的。
也就是说除了引用命名空间外的都是默认工程名。
控制台输入打印基础语句输出一句话:
12Console.WriteLine("yes"); // 自动换行Console.Write("NO"); //不会换行
输入内容:
1Console.ReadLine();
等待输入一行内容,输入回车键后结束输入。
1Console.ReadKey();
检测是否按键,只要按下任意一个键盘就会直接结束输入。
变量折叠代码主要作用是让编程时逻辑更加清晰,他能将
12345#region MyRegion #endregion
这之间的代码折叠起来,避免代码太过凌乱。My ...
01背包问题基础12345678910111213141516171819202122232425262728293031323334353637#include<algorithm>#include<iostream>#include<cmath>#include<cstring>using namespace std;typedef long long ll;const int N = 1010;int n, m;int f[N][N];int w[N], v[N];int main(){ cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> v[i] >> w[i]; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { ...
来自作者的致歉,由于将来不打算深攻算法,所以本章节内容学的较为肤浅,而且没学完,所以就只写了学了的,内容较少,还望见谅。
试除法试除法判定质数123456789101112131415161718192021222324252627282930313233#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int n;bool isprime(int n){ if (n < 2) return false; if (n == 2) return true; for (int i = 2; i <= n / i; i++) { if (n % i == 0) return false; } return true;}int main(){ scanf( ...
DFS排列数字12345678910111213141516171819202122232425262728293031323334#include<iostream>using namespace std;const int N = 10;int n;int path[N];bool st[N];void dfs(int u){ if(u==n) { for (int i = 0; i < n;i++) { printf("%d ", path[i]); } printf("\n"); return; } for (int i = 1; i <= n;i++) { if(!st[i]) { path[u] = i; st[i] = true; ...
链表单链表123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#include<iostream>using namespace std;const int N = 100010;int head;int e[N], ne[N], idx;void init(){ head = -1; idx = 0;}void add_to_head(int x){ e[idx] = x; ne[idx] = head; head = idx; idx++;}void add(int k,int x){ e[idx] = x; ne[idx] = ne[k]; ne[k] = idx; idx++;}void dele(int k){ ne[k] = ne[ne[k]]; ...