标签: sealed

具有私有构造函数的类和具有私有构造函数的密封类之间有什么区别?

A和B之间有什么区别吗?

A类有私有构造函数:

class A
{
    private A()
    { }
}
Run Code Online (Sandbox Code Playgroud)

B类是密封的,有一个私有构造函数:

sealed class B
{
    private B()
    { }
}
Run Code Online (Sandbox Code Playgroud)

c# inheritance constructor sealed

29
推荐指数
3
解决办法
2万
查看次数

为什么List <T>没有密封?

在阅读了这个问题的答案后,脑海中浮现出这个问题; 这基本上List<T>没有虚拟方法,因为它被设计为"快速,不可扩展".

如果这是设计目标,为什么原始设计不包括密封类?(我知道现在不可能,看看这会如何破坏客户端代码中的很多子类)

.net c# language-design sealed

23
推荐指数
1
解决办法
1146
查看次数

防止在C#中重写方法

如何防止在派生类中重写方法?

在Java中,我可以通过final在我希望防止被覆盖的方法上使用修饰符来实现此目的.

我如何在C#中实现同样的目标?
我知道使用sealed但显然我只能用override关键字吗?

class A
{
    public void methodA()
    {
        // Code.
    }

    public virtual void methodB()
    {
        // Code.
    }
}

class B : A
{
    sealed override public void methodB()
    {
        // Code.
    } 
}
Run Code Online (Sandbox Code Playgroud)

所以在上面的例子中,我可以防止methodB()被派生自类的任何类重写B,但是如何防止类首先B覆盖methodB()

更新:当我发布此问题时,我错过了A类声明中的virtual关键字methodB().纠正了它.

c# sealed c#-4.0

21
推荐指数
3
解决办法
3万
查看次数

为什么接口无法标记为密封?

public sealed interface IMyInterface
{
}
Run Code Online (Sandbox Code Playgroud)

给出"修改后的'密封'对此项无效"

我可以在某些方面理解接口必须是可降级的,否则类不能实现它.

但是为什么我不能指定一个接口不应该定义一个子接口,或者有没有办法,只是没有sealed

编辑

我应该努力解释为什么我会想要这个.我经常看到接口继承链,其中dev应该使用组合.Sealed在课堂上是理想的,我想知道是否有办法对接口强制执行相同的操作.由于不合理的继承性使得我认为更难以重构和维护.

编辑2

在评论和帖子的反映中,接口继承树不能像对象继承树那样复杂.当你从另一个界面派生时,IX你所说的只是"必须实现IX".防止这种情况没有任何好处.

c# interface sealed

18
推荐指数
3
解决办法
4160
查看次数

与重写关联的密封关键字

是否总是需要在以下代码的方法的签名中跟随sealed关键字override:

public sealed override string Method1(){.....}
Run Code Online (Sandbox Code Playgroud)

我的意思是,如果我想在没有覆盖的情况下"密封"基类中的方法,override关键字仍然是必要的吗?

c# overriding sealed

18
推荐指数
2
解决办法
8117
查看次数

模拟在RhinoMocks中返回密封类的方法

运行此代码:

_foo = MockRepository.GenerateStub<IBar>();
_foo.Stub(x => x.Foo()).Return("sdf");
Run Code Online (Sandbox Code Playgroud)

什么时候

public interface IBar
{
   string Foo();
}

public class Bar : IBar
{
   public string Foo()
   {
      throw new NotImplementedException();
   }
}
Run Code Online (Sandbox Code Playgroud)

抛出NotSupportedException - "无法创建密封类的模拟".我明白为什么你不能模拟一个密封的类(虽然在TypeMock中有解决方案),但是模拟一个返回密封类(字符串)的类有什么问题?

c# rhino-mocks mocking stub sealed

17
推荐指数
1
解决办法
5787
查看次数

第三方类的TypeConverter属性

创建类时,可以使用TypeDescriptor.GetConverter(typeof(T))将TypeConverter属性应用于它,返回自定义类型转换器.例如:

[TypeConverter(typeof(FooConverter))]
public class Foo
{...}

public class FooConverter: TypeConverter
{...}

var tc = TypeDescriptor.GetConverter(typeof(T)); //returns a FooConverter instance.
Run Code Online (Sandbox Code Playgroud)

只要课程是我们制作的,这就有效.但是如何为我们无法修改源代码的类提供自定义TypeConverter?例如,如何为System.Version类(没有一个)提供自定义TypeConverter?

.net c# type-conversion typeconverter sealed

16
推荐指数
1
解决办法
2739
查看次数

C#密封vs Java决赛

有人请告诉我以下使用sealed不编译的原因吗?然而,如果我更换sealedfinal和编译如Java,它的工作原理.

private sealed int compInt = 100;
public bool check(int someInt)
{
    if (someInt > compInt)
    {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

c# java sealed

15
推荐指数
2
解决办法
3万
查看次数

TypeScript中是否有"密封"或"最终"?

我正在尝试在超类中实现一个方法,该方法应该可以在子类中使用,但不能更改.考虑一下:

export abstract class BaseClass {
    universalBehavior(): void {
        doStuff(); // Do some universal stuff the same way in all sub classes
        specializedBehavior(); // Delegate specialized stuff to sub classes
    }

    protected abstract specializedBehavior(): void;
}
Run Code Online (Sandbox Code Playgroud)

我的意图是BaseClass的任何子类不仅可以省略实现universalBehavior(),甚至不允许提供实现.这在TypeScript中是不是可能?当我省略子类中的实现时,Intellisense会抱怨.我能做的最好的就是:

export class SubClass extends BaseClass {
    universalBehavior(): void {
        super.universalBehavior();
    }

    specializedBehavior(): void {
        // sub class' implementation
    }
}
Run Code Online (Sandbox Code Playgroud)

显然这是有问题的,因为我必须确保没有子类实现universalBehavior()除了调用之外的任何东西super.universalBehavior().

inheritance final sealed typescript typescript2.0

15
推荐指数
2
解决办法
7420
查看次数

C++中的'ref'和'sealed'关键字是什么?

我刚刚看到一些(大概)C++代码,它运行着我不知道的两个"关键字"(我假设关键字但是,因为我没有上下文,所以它们可能很简单#define).

它们似乎也没有出现在C++ 11标准中,至少是我的草案,但由于这是一个非常晚的草案,我无法想象它们会在最后一分钟被放入标准.他们是refsealed.

我发现它们的代码是这样的:

public ref class DevIface sealed {
    private:
        int currOffset;
public:
        DevIface (int initOffset);
        : : :
Run Code Online (Sandbox Code Playgroud)

有谁知道这些关键词是什么,以及它们的意图是什么?

c++ ref sealed

14
推荐指数
3
解决办法
1万
查看次数