C#学习笔记

C#学习笔记

C#学习中遇到的一些问题以及记录。

C#中Readline与Readkey的区别

Readline是读到一个回车为止。
Readkey是等待按键并读取,就是随便按一个键就行。类似于c语言的getchar()

Application.EnableVisualStyles()的作用

Application.EnableVisualStyles()的作用 定义:

public static void EnableVisualStyles ()

此方法为应用程序启用可视样式。

如果控件和操作系统支持视觉样式,则控件将以视觉样式进行绘制。

若要使 EnableVisualStyles 生效,必须在应用程序中创建任何控件之前调用它;EnableVisualStyles 通常是 Main 函数的第一行。当调用 EnableVisualStyles 时,无需单独的清单即可启用可视化样式。
简单的说就是让你的控件(包括窗体)显示出来。

static class Program
{
    //The main entry point for the application.
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

Application.SetCompatibleTextRenderingDefault(false)作用

1.作用:在应用程序范围内设置控件显示文本的默认方式(可以设为使用新的GDI+ , 还是旧的GDI)
true使用GDI+方式显示文本,
false使用GDI方式显示文本.
2.只能在单独运行窗体的程序中调用该方法;不能在插件式的程序中调用该方法.

3.只能在程序创建任何窗体前调用该方法,否则会引发InvalidOperationException异常.

C#中Mutex的用法

C#中Mutex是互斥锁,位于System.Threading 命名空间中。顾名思义,它是一个互斥的对象,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。

如果当前有一个线程拥有它,在没有释放之前,其它线程是没有权利拥有它的。我们可以把Mutex看作洗手间,上厕所的人看作线程;上厕所的人先进洗手间,拥有使用权,上完厕所之后出来,把洗手间释放,其他人才可以使用。

线程使用Mutex.WaitOne()方法等待C# Mutex对象被释放,如果它等待的C# Mutex对象被释放了,它就自动拥有这个对象,直到它调用Mutex.ReleaseMutex()方法释放这个对象,而在此期间,其他想要获取这个C# Mutex对象的线程都只有等待。

我们可以利用这个特性来控制一个应用程序只能运行一个实例。其他实例由于得不到这个Mutex而不能运行。

当第二个实例想运行的时候,由于已经有一个进程拥有了这个互斥锁,此进程不能拥有,所以进程启动被终止。此外还需说明一点,mutex的name是在系统中是唯一的,也就是上述代码中的Name,系统依靠这个name属性来标识唯一的Mutex。

rider在定义方法时会将NotImplementedException添加到许多自动生成的代码中

正是它所说的,你的方法还没有实现。它什么也没做。它只是作为占位符存在。类似于写Python代码中pass。

C#中接口(interface)和抽象类(abstract class)的区别

对面型对象理解总觉得不够深入,这里记录一下:

接口(interface)

  • 接口是无状态的
  • 接口一般只有成员方法,一般无成员变量,属性,虽然也可以有,但基本上不这样做
  • 接口中不能包含实现代码,子类中必须对接口方法进行实现
  • 接口可以被多个类继承实现

抽象类(abstract class)

  • 抽象类是可以有状态的
  • 抽象类除了可以有抽象方法外,还可以有成员变量、属性,也可以有非抽象方法
  • 抽象类中可以有自己的非抽象接口实现,子类可以复用
  • 抽象类不能被多继承,一个类只能继承一个父类
  • 抽象类中的抽象方法在子类中也可以是抽象的,直到最后有个子类的实现即可

C#的多行字符串

添加多行:使用@

string query = @"SELECT foo, bar
FROM table
WHERE id = 42";

将字符串变量值添加到中间:使用 $

string text ="beer";
string query = $"SELECT foo {text} bar ";

多行字符串在中间添加值:使用 $@

string text ="Customer";
string query = $@"SELECT foo, bar
FROM {text}Table
WHERE id = 42";
赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论