标签: sealed

为什么.Net中存在'sealed'关键字?

.Net框架中的大量类被标记为"已密封",从而阻止您使用自己的类继承这些类.当然,这违背了面向对象的本质,您可以在其中扩展和重新定义现有对象的行为.

是否有充分的理由存在'sealed'关键字?

例如,Silverlight中的NotifyCollectionChangedEventArgs是密封的.我想创建自己的ObservableCollection版本,它支持AddRange和RemoveRange,但NCCEA的Silverlight版本不提供支持NewItems和OldItems属性的多个项目的构造函数,这些项目已经被定义为IList.通常,我只是用我自己的变体扩展了类,它覆盖了NewItems和OldItems属性,但是在这种情况下我不能,而且我看不出为什么会出现这种情况.

.net keyword sealed

13
推荐指数
2
解决办法
4174
查看次数

c#sealed和Java的final关键字之间是否有任何功能差异?

可能重复:
在C#中Java的最终结果是什么?

在Java中,final不仅适用于一个类.

所以,我想知道:两个关键字之间是否有任何功能差异?

谢谢你,对不起相对noob问题感到抱歉.

快速的Google搜索无法满足我的需求.

c# java final sealed

13
推荐指数
2
解决办法
1万
查看次数

课堂领域可以密封吗?

MSDN C#编程指南中,提到:

"A类成员,方法,字段,属性或事件,在被覆盖的基类的虚拟构件可以声明构件作为密封的派生类".

我理解上面的方法,属性和事件的声明,但上面的语句如何对类的字段有效?我在一个程序中尝试了这个并验证了一个字段不能是虚拟的,因此不能被覆盖.那怎么能被密封呢?如果它不能,那么来自MSDN参考的上述声明是否应该省略提及字段?

谢谢.

c# oop field sealed

13
推荐指数
2
解决办法
830
查看次数

是否在Java中强制执行密封类,如果是,如何执行?

可以sealed在Scala中定义类,基本上final除非子类在同一文件中发生.

似乎JVM不允许final类字节码及其子类.

考虑到字节码中没有源文件的"概念",如何强制执行此限制?

因此,如何javac防止Scala sealed类在Java中被分类?

java interop scala class sealed

12
推荐指数
1
解决办法
1868
查看次数

mockito vs密封包装

我正在研究一个安全性很大的项目.要求是密封我们的罐子.

由于我们密封了罐子,我们的很多junit测试失败了,出现以下错误:

java.lang.SecurityException: sealing violation: package [a.dependency.package] is sealed
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:234)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    at java.lang.Class.getDeclaredMethods(Class.java:1791)
    at org.mockito.cglib.core.ReflectUtils.addAllMethods(ReflectUtils.java:349)
    at org.mockito.cglib.proxy.Enhancer.getMethods(Enhancer.java:422)
    at org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:457)
    at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
    at org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378)
    at org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318)
    at org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:93)
    at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:50)
    at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:54)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:45)
    at org.mockito.Mockito.spy(Mockito.java:991)
    at [...]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) …
Run Code Online (Sandbox Code Playgroud)

java classloader sealed securitymanager mockito

12
推荐指数
1
解决办法
646
查看次数

无法密封,因为它不是覆盖

我有以下课程:

namespace Warnings
{
    public abstract class BaseWarningIntField : IWarningInnerDataField
    {
        public string PropName;

        public string HeaderCaption;

        public sealed WarningInnerDataType DataType
        {
            get { return WarningInnerDataType.Integer; }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望最后一个属性DataType不可覆盖,因为它是Integer类型的warning-detail字段的基类,所以它需要始终返回正确的类型WarningInnerDataType.Integer.

无论如何,编译器给我以下错误:

'Warnings.BaseWarningIntField.DataType'无法密封,因为它不是覆盖

但是,据我所知,override这与我想要实现的完全相反.

c# overriding sealed

12
推荐指数
1
解决办法
5543
查看次数

访问级别和修饰符(私有,密封等)是否在C#中起到安全作用?

我已经看到你可以使用反射来操纵私人和内部成员.我也看到它说'密封'类更安全,而不是.

修饰语"公开,受保护,内部,私有,抽象,密封,只读"只不过是绅士对设计和API使用的一致意见,只要您能够获得反思,就可以打破它们吗?如果黑客已经在运行调用你的API的代码,游戏就已经丢失了,对吗?

以下是否比任何其他类更安全?

//private class
sealed class User
{
    private string _secret = "shazam";
    public readonly decimal YourSalary;
    public string YourOffice{get;};
    private DoPrivilegedAction()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

c# security sealed

11
推荐指数
3
解决办法
2457
查看次数

Kotlin中另一个类内的密封类无法编译:无法访问'<init>'它是私有的

如果我使用了文档中的示例,

class SomeActivity : AppCompatActivity() {
    sealed class Expr
    data class Const(val number: Double) : Expr()
    data class Sum(val e1: Expr, val e2: Expr) : Expr()
    object NotANumber : Expr()
}
Run Code Online (Sandbox Code Playgroud)

它没有编译,错误:

Cannot access '<init>', it is private in 'Expr'.
Run Code Online (Sandbox Code Playgroud)

但是,将它移到封闭类之外会使其编译:

sealed class Expr
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()

class SomeActivity : AppCompatActivity() {
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?这是预期的行为吗?文档似乎没有提到这一点.

class sealed kotlin

11
推荐指数
1
解决办法
3673
查看次数

为什么WinRT类型必须密封?

在几个地方(例如" 在MSDN上创建用于JavaScript的Windows运行时组件,在C#和Visual Basic中 "),我已经看到它指定,如果您在.NET中编写要从JavaScript使用的类,那么您必须把它变成一个密封的课程.

这似乎是一种任意限制.为什么JavaScript只适用于密封类?

interop sealed windows-runtime

10
推荐指数
1
解决办法
3560
查看次数

Java中什么时候密封类和记录一起使用?

JEP关于密封类 说:

密封类不依赖于记录 (JEP 384) 或模式匹配 (JEP 375),但它们可以很好地与两者配合。

“工作顺利”是什么意思?对于在某些特定情况下使用该组合有什么建议吗?

java record sealed sealed-class

10
推荐指数
1
解决办法
4167
查看次数