标签: sealed

为什么暴露类型必须为WinMD/WinRT组件密封?

VS编译器不允许为WINMD类型库创建密封的公开类型.

为什么要放置此限制?(我知道密封类型的优点,我的问题是关于Win RT组件).

.net sealed windows-8 windows-runtime winrt-xaml

7
推荐指数
1
解决办法
1672
查看次数

课程是否仍应作为推荐密封?

我知道这在"技术上"是这个问题的重复. 我应该推荐默认的密封类吗?

但是我再问一遍,因为显然这个建议已经改变了1次虽然我在过去几年里找不到任何关于它的事情,或者现在越来越多的人推荐AGAINST密封课程,这要归功于改进在测试中(这是主要原因之一),处理器速度(速度差现在可以忽略不计)等.

我正在试图找出最新的天气指南是什么,或者不标记classessealed.

1 Essential C#6.0(第5版),Mark Michaelis(合着者Eric Lippert):

"一般来说,将一个类别标记为密封很少进行,并且只应保留那些有充分理由支持这种限制的情况.实际上,离开类型未开封的情况越来越令人满意,因为单元测试因为需要支持模拟(测试双重)对象创建来代替实际的实现."

这是硬拷贝证明,因为其他人都是口口相传.

c# class sealed

7
推荐指数
0
解决办法
163
查看次数

密封班级绩效的证据

可能重复:
密封类真的提供性能优势吗?

我的团队正在内部与密封的课堂辩论进行斗争,我想将辩论简化为设计问题,并将性能神话从辩论议程中删除.

任何人都可以发布一些代码来证明通过将类声明为密封而引入的性能提升吗?每秒2000万次虚拟方法调用,我看不到多少好处,可能在1000万次迭代中有1或2毫秒,但即便如此,我也不确定,因为结果会跳转.这适用于调试和发布运行.

ps我跟随一些John Skeet获得了关于密封类设计的好处的智慧,特别是当软件是通过团队或组织边界交付和/或类是组件中的打包组件样式时.

.net c# oop sealed

6
推荐指数
0
解决办法
870
查看次数

'密封类中的受保护成员'警告(单例类)

我已经实现了一个单例类,并且不断收到警告,我正在编写的方法是一个'在密封类中声明的新受保护成员'.它不会影响构建,但我真的不想忽略警告,以防以后出现问题?我理解一个密封类是一个不能被继承的类 - 所以它的方法不能被覆盖,但我仍然不明白为什么下面的代码会给我警告(是因为使用了单例设计?):

namespace WPFSurfaceApp
{
public sealed class PresentationManager
{
    PresentationManager()
    {
    }

    protected void MethodName()
    {
    }

    public static PresentationManager Instance
    {
        get
        {
            return Nested.instance;
        }
    }

    class Nested
    {
        // Explicit static constructor to tell C# compiler
        // not to mark type as beforefieldinit
        static Nested()
        {
        }

        internal static readonly PresentationManager instance = new PresentationManager();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:警告是关于MethodName()方法.编辑:将public void MethodName()更改为protected void MethodName()

c# wpf singleton sealed

6
推荐指数
1
解决办法
4174
查看次数

当"虚拟"是可选的时,C#中"密封"的目的是什么?

如果一个类没有任何虚方法,我认为继承类的任何方式都不会影响任何未明确引用该实例作为子类实例的代码,即

Subclass obj = new Subclass()
Run Code Online (Sandbox Code Playgroud)

而不是

BaseClass obj = new SubClass()
Run Code Online (Sandbox Code Playgroud)

因此,为什么sealed甚至存在?

如果你没有声明任何东西virtual(我认为在密封类中没有任何意义),它会阻止像(例如)a ListViewItem那样存储一些关于它代表什么的额外信息的代码"知道"该信息是在那里,与重写的方法不同,它对没有用该子类编写的代码没有影响.

c# oop inheritance class sealed

6
推荐指数
2
解决办法
859
查看次数

继承MATLAB中的密封类

在MATLAB中,类的一个属性(后面定义classdef)是Sealed,这意味着没有类可以将它用作超类(或者更确切地说," 表示这些类没有被设计为支持子类. " 1).

例如,如果我尝试实例化一个定义如下的类(考虑tableSealed):

classdef SomeLie < table

end
Run Code Online (Sandbox Code Playgroud)

我会得到'MATLAB:class:sealed'错误:

>> A = SomeLie;
Error using SomeLie
Class 'table' is Sealed and may not be used as a superclass.
Run Code Online (Sandbox Code Playgroud)

由于我拒绝由机器来告诉我可能可能不会做,我想继承一个Sealed,而不管.我怎样才能在MATLAB R2017a中做到这一点?

我很难相信这个系统是完全不透气的,所以我正在寻找一种能够导致该Sealed属性被忽略的解决方案(或类似的东西).所需的解决方案应该无需修改任何"库类定义"即可从中删除Sealed.


我试着玩"反思",但到了死胡同......

classdef SomeLie % < table  
  properties (Access = private)
    innerTable table;
  end

  properties (GetAccess = public)
    methodHandles struct = struct();
  end …
Run Code Online (Sandbox Code Playgroud)

oop matlab inheritance sealed undocumented-behavior

6
推荐指数
1
解决办法
500
查看次数

在 Swift 中使用 AES.GCM.SealedBox 解密数据

我正在尝试使用 AES.GCM 解密数据。加密的数据工作正常,但当我尝试使用相同的密钥解密数据时,会出现身份验证错误。下面是解密代码

func decryptData(decryptToData: Data, key: SymmetricKey) -> String {
    var decryptedString: String!
    let combinedData = decryptToData // Previous sealed bo
    let sealedBoxToOpen = try! AES.GCM.SealedBox(combined: decryptToData)

    if let decryptedData = try? AES.GCM.open(sealedBoxToOpen, using: key) {
        decryptedString = String(data: decryptedData, encoding: .utf8)!
        print(decryptedString)
    } else {
        print("error", CryptoKitError.self)
        // Ouch, doSomething() threw an error.
    }
    return decryptedString
}
Run Code Online (Sandbox Code Playgroud)

以下是我的加密代码

let iv = AES.GCM.Nonce()
var encryptedData: Data!
let key = SymmetricKey(size: .bits128)

func encryptData(encryptString: String, key: SymmetricKey) -> Data { …
Run Code Online (Sandbox Code Playgroud)

encryption cryptography sealed aes-gcm swift

6
推荐指数
1
解决办法
3555
查看次数

Java Sealed 类/接口的许可关系是否具有传递性

如果我正确地阅读了 JLS \xc2\xa78.1.6\xc2\xa79.1.4,则密封类/接口允许的类只是直接子类/接口。

\n

为了说明这一点,请考虑以下示例:

\n
public sealed interface I1 permits I2, C, D { /*...*/ }\npublic final class C implements I1 { /*...*/ }\npublic final class D implements I1 { /*...*/ }\n\npublic sealed interface I2 extends I1 permits E, F { /*...*/ }\npublic final class E implements I2 { /*...*/ }\npublic final class F implements I2 { /*...*/ }\n
Run Code Online (Sandbox Code Playgroud)\n

如果我正确理解了规范,I1显然允许CandD但不允许Eand F(通过fromextends的层次结构)。它是否正确?I2 …

java sealed sealed-class java-17

6
推荐指数
1
解决办法
1166
查看次数

为什么“密封”会影响 IDisposable 的实现?

阅读此处的答案后,我决定将我的类标记为密封,以简化IDisposable实现。为什么sealed会影响IDisposable的实现(例如GC.SuppressFinalize(this);不需要调用)?请解释发生了什么事。我需要能够向其他开发人员解释为什么我要密封该类。

.net idisposable sealed .net-2.0

5
推荐指数
1
解决办法
2546
查看次数

最好的做法是将所有类标记为密封,除非您打算明确继承它们?

将类标记为密封似乎可以获得一些真正的好处:

  1. 某些情况下的性能
  2. 其他特殊情况下的编译时类型安全密封类的显式转换失败
  3. 防止类的意外继承

而且缺点似乎相对较少......您可以在不破坏代码的情况下解封一个类,但是您以后无法在不破坏代码的情况下密封一个已解封的类。

最好的做法是始终将类标记为密封,除非您打算继承它?为什么或者为什么不?

关于这个主题还有其他评论或指导吗?

c# oop sealed

5
推荐指数
1
解决办法
3855
查看次数