在SHA256该类中,该Create方法是一个静态方法,它返回“System.Security.Cryptography.SHA256 的默认实现的实例”(根据方法文档)。此默认实现是SHA256Managed- 的非抽象子类SHA256。
和类在同一个程序集中定义,因此SHA256可用作有效类。SHA256ManagedSHA256ManagedSHA256.Create
下面是一个抽象基类的示例,它具有一个Create创建非抽象派生类的实例的静态方法:
public abstract class A
{
public static A Create()
{
return new B();
}
public abstract void DoSomething();
}
public class B : A
{
public override void DoSomething()
{
// do nothing.
}
}
实际上,编译器会在为这些成员编译代码之前为整个程序集构建类及其成员的列表。因此,在A.Create编译方法时,编译器已经知道 class 的存在和结构B。
这也是为什么可以在引用它们的第一个点之后将属性和方法放在类中的原因,如下所示:
class C
{
void some_method()
{
++counter;
}
int counter;
}
C编译器在编译代码之前已经知道类的整个结构,some_method因此它可以编译语句++counter;而不会出错。