C#密封类和密封方法

时间:2021-11-23 05:37:18

1、密封类

1)不是所有的类都可以继承,不能别继承的类叫做密封类。如果一个类不希望被继承、被派生可以采用关键字sealed,下面Class2不能继承Class1

Class1.cs:

namespace 密封类和密封方法
{
//如果一个类不希望被继承、被派生可以采用关键字sealed
public sealed class Class1
{
}
}

Class2.cs

namespace 密封类和密封方法
{
class Class2:Class1//不可以继承,Class1有修饰符sealed
{
}
}

2)密封类中不能包含虚方法(virtual)和抽象方法(abstract),抽象方法和虚方法的存在就是要用来继承的,密封的类没有为派生类实现实现虚方法和抽象方法的机会。

3).NET类库大量使用密封类,使希望从这些类从这些类中派生出自己的类的第三方开发人员无法访问这些类,例如string就是密封类

2、密封方法

1)密封方法:用修饰符sealed进行标记的方法

2)作用:使用sealed修饰可以防止派生类进一步重写该方法

3)如果实例方法声明包含sealed修饰符,则它必须包含override修饰符

4)不能重写密封方法,示例:(Class3不能重写Class2中的Write()方法)

Class3.cs:

class Class3:Class2
{
//public override sealed void Write() {
// Console.WriteLine("Write()这个方法能否被重写");
//}
//不能重写密封方法
}

Class2.cs:

public class Class2:Class1
{
public sealed override void Write()
{
Console.WriteLine("这是一个密封方法");
}
}

Class1.cs:

public class Class1 {
public virtual void Write() {
Console.WriteLine("这是一个未密封的方法");
}
}

5)源码笔记:

Program.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 密封类和密封方法
{
//密封类中不能包含虚方法(virtual)和抽象方法(abstract),抽象方法和虚方法的存在就是要用来继承的,密封的类没有为派生类实现实现虚方法和抽象方法的机会
//.NET类库大量使用密封类,使希望从这些类从这些类中派生出自己的类的第三方开发人员无法访问这些类,例如string就是密封类
//密封方法:用修饰符sealed进行标记的方法
//作用:使用sealed修饰可以防止派生类进一步重写该方法
//如果实例方法声明包含sealed修饰符,则它必须包含override修饰符
//不能重写密封方法
//public override sealed void Wite() {
// Console.WriteLine("Write()这个方法能否被重写");
//}

class Program
{
static void Main(string[] args)
{
Class2 myClass2 = new Class2();
myClass2.Write();

}
}
}

Class1.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 密封类和密封方法
{
//如果一个类不希望被继承、被派生可以采用关键字sealed
public class Class1 {
public virtual void Write() {
Console.WriteLine("这是一个未密封的方法");
}
}
}

Class2.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 密封类和密封方法
{
public class Class2:Class1
{
public sealed override void Write()
{
Console.WriteLine("这是一个密封方法");
}
}
}

Class3.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 密封类和密封方法
{
//不是所有的类都可以被继承,不能被继承的类称为
//
class Class3:Class2
{
//public override sealed void Write() {
// Console.WriteLine("Write()这个方法能否被重写");
//}
//不能重写密封方法
}
}