在C#和C++/CLI中,关键字sealed(或VB中的NotInheritable)用于保护类免受任何继承机会(该类将是不可继承的)).我知道面向对象编程的一个特性是继承,我觉得sealed的使用违背了这个特性,它停止了继承。是否有示例显示sealed的好处以及何时使用它很重要? 最佳答案 在实现安全功能的类上,这样就不能“模拟”原始对象。更一般地说,我最近与Microsoft的一个人交流,他告诉我他们试图将继承限制在真正完全有意义的地方,因为如果不加以处理,它会在性能方面变得昂贵。sealed关键字告诉CLR没有类进一步向下寻找
在C#和C++/CLI中,关键字sealed(或VB中的NotInheritable)用于保护类免受任何继承机会(该类将是不可继承的)).我知道面向对象编程的一个特性是继承,我觉得sealed的使用违背了这个特性,它停止了继承。是否有示例显示sealed的好处以及何时使用它很重要? 最佳答案 在实现安全功能的类上,这样就不能“模拟”原始对象。更一般地说,我最近与Microsoft的一个人交流,他告诉我他们试图将继承限制在真正完全有意义的地方,因为如果不加以处理,它会在性能方面变得昂贵。sealed关键字告诉CLR没有类进一步向下寻找
有没有在静态类中实现的类?意思是:staticclassABC:Anyclass有没有类既可以在密封类中又可以在静态类中继承?意思是:staticclassABC:AClass{}和sealedclassABC:AClass{}我在某种程度上可能是错的吗? 最佳答案 这可能对您有帮助:+--------------+---+-------------------------+------------------+---------------------+|ClassType||Caninheritfromothers|Canbei
有没有在静态类中实现的类?意思是:staticclassABC:Anyclass有没有类既可以在密封类中又可以在静态类中继承?意思是:staticclassABC:AClass{}和sealedclassABC:AClass{}我在某种程度上可能是错的吗? 最佳答案 这可能对您有帮助:+--------------+---+-------------------------+------------------+---------------------+|ClassType||Caninheritfromothers|Canbei
如果我使用docs中的示例,classSomeActivity:AppCompatActivity(){sealedclassExprdataclassConst(valnumber:Double):Expr()dataclassSum(vale1:Expr,vale2:Expr):Expr()objectNotANumber:Expr()}无法编译,报错:Cannotaccess'',itisprivatein'Expr'.但是,将其移到封闭类之外使其可以编译:sealedclassExprdataclassConst(valnumber:Double):Expr()dataclas
如果我使用docs中的示例,classSomeActivity:AppCompatActivity(){sealedclassExprdataclassConst(valnumber:Double):Expr()dataclassSum(vale1:Expr,vale2:Expr):Expr()objectNotANumber:Expr()}无法编译,报错:Cannotaccess'',itisprivatein'Expr'.但是,将其移到封闭类之外使其可以编译:sealedclassExprdataclassConst(valnumber:Double):Expr()dataclas
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhatistheequivalentofJava’sfinalinC#?在Java中,final不仅仅适用于一个类。所以,我想知道:这两个关键字在功能上有什么区别吗?谢谢,很抱歉问了一个比较菜鸟的问题。Google快速搜索无法满足我的需求。
有人能告诉我以下使用sealed不能编译的原因吗?然而,如果我将sealed替换为final并将其编译为Java,它就可以工作。privatesealedintcompInt=100;publicboolcheck(intsomeInt){if(someInt>compInt){returntrue;}returnfalse;} 最佳答案 那是因为final在Java中意味着很多不同的东西,这取决于你在哪里使用它,而sealed在C#中仅适用于类和继承虚拟成员(方法、属性、事件)。在Java中final可以应用于:classes,表
我对OOP的一些概念很困惑:virtual、override、new和sealedoverride.谁能解释一下区别?我很清楚,如果要使用派生类方法,可以使用override关键字,这样基类方法将被派生类覆盖。但我不确定new和sealedoverride。 最佳答案 virtual关键字用于修改方法、属性、索引器或事件声明,并允许它在派生类中被覆盖。例如,这个方法可以被任何继承它的类覆盖:使用new修饰符显式隐藏从基类继承的成员。要隐藏继承的成员,在派生类中使用相同的名称声明它,并使用new修饰符对其进行修改。这一切都与多态性有关
我刚刚看到一些(大概)C++代码,其中包含两个我不知道的“关键字”(我假设关键字,但由于我没有上下文,它们可能很简单#define东西)。它们似乎也没有出现在C++11标准中,至少是我的草案,但是,因为这是一个相当晚的草案,我无法想象它们在最后一刻才被纳入标准.它们是ref和sealed。我在其中找到它们的代码类似于:publicrefclassDevIfacesealed{private:intcurrOffset;public:DevIface(intinitOffset);:::有谁知道这些关键字是什么,以及它们的目的是什么? 最佳答案