静态函数中访问的成员必须是静态成员。
1.C#访问修饰符
- public :公开的
- private:私有的,只能在当前类的内部访问
- protected:受保护的,只能在当前类的内部以及该类的子类中访问。
- internal :只能在当前程序集(项目)中访问,在同一个项目中,internal和public的权限是一样的
- internal protected
简单工厂设计模式
1.核心就是用抽象类方法写出多态
序列化和反序列化
目的: 将一个复杂的对象转换流,方便我们的存储与信息交换。
Serializable
-
序列化类对象,先将类标记为可被序列化 类前面加 [Serializable]
//要将p这个对象 传输给对方电脑 Person p = new Person(); p.Name = "张三"; p.Gender = '男'; p.Age = 20; using (FileStream fsWrite = new FileStream(@"C:\Users\xuzheng\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Write)) { //star serializable BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fsWrite, p); } Console.WriteLine("序列化成功"); Console.ReadKey(); //接收对方发过来的二进制 反序列化成对象 Person p; using (FileStream fsRead = new FileStream(@"C:\Users\xuzheng\Desktop\111.txt",FileMode.Open,FileAccess.Read)) { BinaryFormatter bf = new BinaryFormatter(); p = (Person)bf.Deserialize(fsRead); Console.WriteLine(p.Name); Console.WriteLine(p.Gender); Console.WriteLine(p.Age); Console.ReadKey(); }
MD5加密
public static string GetMD5(string str)
{
MD5 md5 = MD5.Create();
//开始加密
byte[] buffer = Encoding.Default.GetBytes(str);
byte[] MD5Buffer = md5.ComputeHash(buffer);
string str2 = "";
for (int i = 0; i < MD5Buffer.Length;i++)
{
str2 += MD5Buffer[i].ToString("x2");
}
return str2;
}
Process(处理) 进程处理
//获得等钱程序中所有正在运行的进程
Process[] pros = Process.GetProcesses();
//通过进程打开一些应用程序
Process.Start("calc");
Process.Start("iexplore","http://www.baidu.com");
//通过一个进程打开指定的文件
ProcessStartInfo psi = new ProcessStartInfo(@"C:\Users\t.txt");
Process p = new Process();
p.StartInfo = psi;
p.Start();
线程 Thread
//创建一个线程并执行Test方法
Thread thr = new Thread(Test);
//变成后台线程
thr.IsBackground = true;
//线程可以执行了
thr.Start();
//结束线程
thr.Abort();
-
.Net 不允许跨线程执行
//取消跨线程访问检查 Control.CheckForIllegalCrossThreadCalls = false;
前台线程:只有所有的前台线程都关闭才能完成程序关闭。
后台线程:只要所有的前台线程结束,后台线程自动结束。
struct 结构和类的异同
定义:struct 结构体:1.值类型. 2.可以写字段和属性 3.可以写方法
结构和类的区别
在类中,构造函数里,既可以给字段赋值也可以给属性赋值,但是在结构的构造函数中,必须只能给字段赋值。
在结构的构造函数中,需要给全部的字段赋值,而不能选择的给字段赋值
-
结构和类的构造函数:
1> 相同点:
不管是结构还是类,本身都会有一个默认的无参数的构造函数。
2> 不同点:
1. 当在类中写了一个新的构造函数后,默认的无参构造函数就被干掉了。 2. 在结构中,如果新写了一个构造函数,默认的无参构造函数依然在。
-
如果只是单纯的存储数据,推荐使用结构.
如果使用面向对象的思想开发,使用class
单例
将构造函数设置为private
创建一个返回static函数返回对象本身
-
创建一个单例。
public class Person { //全局的唯一单例 public static Person PersonSingle = null; //1..将构造函数私有化 public 转为 private private Person() { } //2.创建一个static 方法返回Person对象 public static Person GetSingle() { if(PersonSingle == null) { PersonSingle = new Person(); } return PersonSingle; } }
委托 匿名函数 lamda表达式
namespace _06_匿名函数
{
//委托
public delegate void DelSayHi(string name);
class Program
{
static void Main(string[] args)
{
//匿名函数
DelSayHi del = delegate (string name)
{
Console.WriteLine("你好" + name);
};
del("张三"); //打印:你好张三
Console.ReadKey();
//lamda表达式
DelSayHi ddel = (string name) => { Console.WriteLine(name); };
ddel("张三");//打印:张三
}
}
}