标签: sealed

用C++和虚拟继承密封类

class ClassSealer {
private:
   friend class Sealed;
   ClassSealer() {}
};
class Sealed : public ClassSealer
{ 
   // ...
};
class FailsToDerive : public Sealed
{
   // This class is capable of being instantiated
};
Run Code Online (Sandbox Code Playgroud)

以上未能封上课,但以下作品,为什么?

class ClassSealer {
private:
   friend class Sealed;
   ClassSealer() {}
};
class Sealed : public virtual ClassSealer
{ 
   // ...
};
class FailsToDerive : public Sealed
{
   // Cannot be instantiated
};
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?虚拟继承在这里发挥了什么作用?

c++ inheritance access-control sealed virtual-inheritance

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

私有构造函数,子类化和密封

如果可以通过在基类中声明私有构造函数来阻止子类化,为什么我们需要"密封"关键字?是这样的,因为CLI可以更好地优化它吗?也许.

谢谢.

c# constructor subclass sealed

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

为什么密封关键字不包含在访问修饰符列表中?

我认为sealed应该包含在C#语言的访问修饰符列表中.有人可以说出它被排除在外的原因吗?

c# language-design access-modifiers sealed

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

为什么我可以密封一个实现接口但不能封闭成员的类?

鉴于此接口

public interface IMyInterface
{
    string Method1();
}
Run Code Online (Sandbox Code Playgroud)

为什么这是有效的

public sealed class InheretedFromInterfaceSealed: IMyInterface
{
    public string Method1()
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不是

public class InheretedFromInterfaceWithSomeSealed: IMyInterface
{
    public sealed string Method1()
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,它是抽象类的有效场景

public abstract class AbstractClass
{
    public abstract string Method1();
}
public class InheretedFromAbstractWithSomeSealed: AbstractClass
{
    public sealed override string Method1()
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

.net virtual inheritance interface sealed

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

F#:无法从F#interactive中的List <'T>继承

  >     type XList<'T> (_collection : seq<'T>) =
            inherit List<'T> (_collection)
            member this.Add _item = if not <| this.Contains _item then base.Add _item
            new () = XList<'T> (Seq.empty<'T>);;

              inherit List<'T> (_collection)
      --------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

stdin(47,9): error FS0945: Cannot inherit a sealed type
Run Code Online (Sandbox Code Playgroud)


我的理解是List <'T>实际上没有密封.没有?

此外,这似乎在F#interactive之外工作得很好.确切的代码在我的F#项目中,编译器处理它而不抱怨.我在几个C#项目中也有同样的事情.代码在每种情况下都按预期工作.

通常,我只是使用静态方法扩展List <'T>(将其作为"F#方式"),但隐藏List.Add也应该正常工作.

f# interactive list sealed

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

如何向密封类 Arc 添加属性

如何向密封的 Arc 类添加两个新属性。我想用一个 double 属性来扩展这个类来保存一个 double 值和一个字符串属性来保存对象的名称。我的第一次尝试是通过 Tag 属性,但这只能保存双精度值或对象名称。

问题是我创建了一个包含 43 个圆弧对象的新用户控件,当鼠标进入一个圆弧时,另一个控件会显示输入段的值和名称。所以每个弧都使用 SAME MouseEntered 函数,我想通过“对象发送者”获取信息。

我希望任何人都有一个好主意。

c# extends properties sealed

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

是否可以在jar文件中封装类?

所以我知道可以通过将sealed属性设置为true来密封jar文件中的包,但是可以对清单中的类条目执行相同的操作吗?

如果Boot.class存在或密封仅适用于包,这个密封属性是否可以工作?

例:

Manifest-Version: 1.0

Name: com/myCompany/randompackage/Boot.class 
Sealed: true 

java jar manifest sealed

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

C# Sealed 防止方法被派生

我试图阻止我的基类派生它的方法之一,但似乎不可能按照我喜欢的方式来做,我认为我做错了。

你能帮忙吗?:) 我真的很想成功使用sealed 关键字!

这是一些代码:

public class BaseClass
{
    public void MyMethod1(string input)
    {
        // Doing stuff here
    }
    public sealed void MyMethod2(string input)
    {
        // Doing stuff here
    }
}
public class DerivedClass : BaseClass
{
    // Other fields and stuff over there
}
Run Code Online (Sandbox Code Playgroud)

发生的事情是有问题的,在第一级派生的方法上不允许使用关键字sealed。我只有一个派生级别,我正在寻找的是避免在 DerivedClass 中派生 MyMethod2。

但这似乎不太好:/有什么建议或更正吗?

提前致谢 :)

编辑:经过多次评论和午餐暂停后,我将尝试明确我的问题!

我真正想做的是阻止我的班级使用“她”继承的方法之一。你们中有些人提到使用组合而不是继承,因为我似乎误解了它的含义。

我认为组合只存在于 UML 中而不存在于代码中。C# 代码中的组合听起来像什么?

c# inheritance sealed

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

我们可以在类中声明密封方法吗

class X {
    sealed protected virtual void F() {
        Console.WriteLine("X.F");
    }
    sealed void F1();
    protected virtual void F2() {
        Console.WriteLine("X.F2");
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中有编译时错误:

XF()'不能密封,因为它不是替代

X.F1()'无法密封,因为它不是替代

这是否意味着我们只能使用sealed必须覆盖某些方法的关键字whey?

c# oop overriding sealed

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

C++ Final或Sealed

考虑以下课程:

class X {
};
Run Code Online (Sandbox Code Playgroud)

人们可以很容易地继承下去:

class Y : public X {
};
Run Code Online (Sandbox Code Playgroud)

好吧到目前为止......假设我们不希望任何人继承,Y我们可以这样做.

class Y sealed : public X {
};
Run Code Online (Sandbox Code Playgroud)

或者我们可以这样做:

class Y final : public X 
};
Run Code Online (Sandbox Code Playgroud)

什么是两个关键字之间的主要差异finalsealed?我知道他们的基本目的和用途; 我只想知道两者之间是否有任何明显的不同.

c++ final sealed

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