(一)、关于override的用法,是对 父类中的 虚方法的重写覆盖。
override(重写,覆盖)
(1)方法名、参数、返回值相同。
(2)子类方法不能缩小父类方法的访问权限。
(3)子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)
(4)存在于父类和子类之间。
(5)方法被定义为final不能被重写。
(6)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
overload(重载,过载)
(1)参数类型、个数、顺序至少有一个不相同。
(2)不能重载只有返回值不同的方法名。
(3)针对于一个类而言。
(4)不能通过访问权限、返回类型、抛出的异常进行重载;
(5)方法的异常类型和数目不会对重载造成影响;
override应用中,最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。 除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。
override是在不同类之间的行为,overload是在同一个类中的行为。
(二)、C#中sealed关键字
1. sealed关键字
当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承。类似于Java中final关键字。
在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类 B 继承。
2. sealed 修饰方法或属性
能够允许类从基类继承,并防止它们重写特定的虚方法或虚属性。
1)sealed是对虚方法或虚属性,也就是同override一起使用,如果不是虚方法或虚属性会报出错误:cannot be sealed because it is not an override
public class D { /* ConsoleApplication1.MSFun.Sealed.D.M()' * cannot be sealed because it is not an override */ public sealed void M() { Console.WriteLine("D.M()"); } }
2)防止子类重写特定的方法或属性
public class A
{
protected virtual void M() { Console.WriteLine("A.M()"); }
protected virtual void M1() { Console.WriteLine("A.M1()"); }
}
public class B : A
{
protected sealed override void M() { Console.WriteLine("B.M()"); }
protected override void M1() { Console.WriteLine("B.M1()"); }
}
public sealed class C : B
{
/* ConsoleApplication1.MSFun.Sealed.C.M()':
* cannot override inherited member 'ConsoleApplication1.MSFun.Sealed.B.M()'
* because it is sealed */
//protected override void M() { Console.WriteLine("C.M()"); }
protected override void M1() { Console.WriteLine("C.M1()"); }
}
(三)、GUID表示全局唯一标识符
https://blog.csdn.net/diyu122222/article/details/79791073
什么是 GUID?
全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装。在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID。
为什么要用GUID?
世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。
(四)、readonly关键字
readonly用于字段,意思是:字段只能在初始化时候赋值,在随后的使用中,字段的值不能再改变。举个列子:
public class TestReadonly
{
private int readonly int x; //X是只读字段
public TestReadonly()
{
// 只能在初始化时,对只读字段赋值
x = 100;
}
pubilc int GetX()
{
//这个语句是错误的,因为x不能被再次赋值,x是只读的(readonly),而
// 下面的语句试图改变x的值。
//x = x +100;
//这个语句是正确的,因为语句执行后,x的值没有变
int x1 = x + 100;
return x1;
}
}
(五)、using关键字的使用
https://www.cnblogs.com/ma-yuanhao/p/9139262.html
using语句,定义一个范围,在范围结束时处理对象。
using语句提供了一个脉络清晰的机制来控制资源的生存期,创建的对象会在using语句结束时被摧毁,使用前提该对象必须继承了IDisposable接口,以下代码说明了using的机制:
string str = "LittleBai";
//创建写入字符串
Byte[] bytesToWrite = Encoding.Default.GetBytes(str); ;
//创建文件
using (FileStream fs = new FileStream("test.txt", FileMode.Create))
{
//将字符串写入文件
fs.Write(bytesToWrite, 0, bytesToWrite.Length);
}