c#在定义一个类时,public static class 类名;public class 类名;class 类名,这3个有啥不同吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#在定义一个类时,public static class 类名;public class 类名;class 类名,这3个有啥不同吗?相关的知识,希望对你有一定的参考价值。

public是公共的,static是静态的,class表示这是类。

public static class 表示这是一个公共的静态类,直接通过类名调用里面的方法,变量等。不用new的。
public class 需要new才可以用。
class 是表示私有的类,外部不能调用。
参考技术A static 是静态类 静态类不能实例化 直接class 访问级别为internal 访问仅限于当前程序集 public 访问不受限制

在 c# 中声明类时,您可以拥有的最大有效修饰符数是多少?

【中文标题】在 c# 中声明类时,您可以拥有的最大有效修饰符数是多少?【英文标题】:What is max number of valid modifiers you can have while declaring a class in c#? 【发布时间】:2020-03-27 17:20:52 【问题描述】:

这个问题更多是出于好奇。

修饰符是指在声明类之前添加的关键字。

例如

//1       2        3             
public abstract partial class Foo



这有 3 个修饰符 publicabstractpartial

从这个问题的角度来看,零修饰符类似于

class Foo



在声明类名时,您可以在类名之前拥有的最大有效修饰符数是多少?

【问题讨论】:

【参考方案1】:

最大数量是...

5!

(如果算上unsafe,则为 6 个)

根据here,类声明如下所示:

class_declaration
    : attributes? class_modifier* 'partial'? 'class' identifier type_parameter_list?
      class_base? type_parameter_constraints_clause* class_body ';'?
    ;

您可能不会将属性视为“修饰符”,但您可能partial 关键字视为“类修饰符”,尽管它不是实际的class_modifier

class_modifier的列表是:

class_modifier
    : 'new'
    | 'public'
    | 'protected'
    | 'internal'
    | 'private'
    | 'abstract'
    | 'sealed'
    | 'static'
    | class_modifier_unsafe
    ;

我们知道最长的访问修饰符是protected internal,所以我们可以忽略所有的访问修饰符:

class_modifier
    : 'new'
    | 'abstract'
    | 'sealed'
    | 'static'
    | class_modifier_unsafe
    ;

你只能选择sealedstaticabstract其中之一,所以我们剩下6个“关键词”:

protected internal new sealed/static/abstract partial unsafe

请注意,newprotected internal 只能用于嵌套类声明。

【讨论】:

不可能,我不敢相信这是5!,这太过分了! (数学笑话)

以上是关于c#在定义一个类时,public static class 类名;public class 类名;class 类名,这3个有啥不同吗?的主要内容,如果未能解决你的问题,请参考以下文章

在一个c#源代码代码中,在一个函数里面定义一个public变量,这个变量就是全局变量了吗?

定义派生类时,为啥基类标记为“public”? [复制]

VC中public定义的变量与全局变量的区别??

java中static的作用详解

C#的静态类

C# 之 static的用法详解