我想创建一个可以从同一程序集中的类型继承的类型,但不能从程序集外部继承.我确实希望类型在程序集之外可见.
这可能吗?
据我所知,让班级sealed摆脱VTable中的查找或我错了吗?如果我创建一个类sealed,这是否意味着类层次结构中的所有虚方法也都标记了sealed?
例如:
public class A {
protected virtual void M() { ........ }
protected virtual void O() { ........ }
}
public sealed class B : A {
// I guess I can make this private for sealed class
private override void M() { ........ }
// Is this method automatically sealed? In the meaning that it doesn't have to look in VTable and can be called directly?
// Also what about O() can …Run Code Online (Sandbox Code Playgroud) 这个问题确实有点无意义,但我只是好奇:
这个:
public sealed class MyClass
{
protected void MyMethod(){}
}
Run Code Online (Sandbox Code Playgroud)
编译,但发出警告
而这个:
public sealed class MyClass
{
public virtual void MyMethod(){}
}
Run Code Online (Sandbox Code Playgroud)
不编译.出于纯粹的好奇心,这是有原因的吗?
我相信我希望类的一些方法和属性是不可重写的,并在所有派生类中使用base的实现.怎么做到这一点?sealed关键字似乎不起作用,并说"方法不能被密封,因为它不是覆盖".
python是否有类似于密封类的东西?我相信它在java中也被称为final类.
换句话说,在python中,我们可以标记一个类,以便它永远不会被继承或扩展吗?python曾经考虑过有这样的功能吗?为什么?
实际上试图理解为什么密封课程甚至存在.答案在这里(和很多,很多,很多,很多,很多,真的很多其他地方)没有满足我的人,所以我试图从不同的角度看.请避免对这个问题的理论答案,并专注于标题!或者,如果你坚持,至少请给出csharp中密封类的一个非常好的实用例子,指出如果它是未密封的话会破坏大的时间.
我不是两种语言的专家,但我确实知道两种语言.就在昨天,在使用csharp进行编码时,我了解了密封类的存在.现在我想知道python是否有相同的东西.我相信它的存在是有充分理由的,但我真的没有得到它.
VS编译器不允许为WINMD类型库创建密封的公开类型.
为什么要放置此限制?(我知道密封类型的优点,我的问题是关于Win RT组件).
我想知道为什么要密封单例类.如果我们将构造函数设置为私有,我们可以阻止类派生吗?..下面我从MSDN粘贴几行.请给我一些颜色..
在此策略中,实例是在第一次引用类的任何成员时创建的.公共语言运行库负责变量初始化.该类被标记为密封以防止派生,这可能会添加实例.有关标记类密封的优缺点的讨论,请参阅[Sells03].此外,变量标记为只读,这意味着它只能在静态初始化(此处显示)或类构造函数中分配.
我想知道这一点,因为我需要继承StringBuilder来实现一个TextChanged事件.我总是可以创建一个包含private StringBuilder隐式/显式转换的包装器,但这似乎不是一个合适的解决方案.
幸运的是,我可以从写入StringBuilder的对象继承,所以这对我来说不是一个问题,但我仍然很好奇为什么这个类是密封的.
我知道这在"技术上"是这个问题的重复. 我应该推荐默认的密封类吗?
但是我再问一遍,因为显然这个建议已经改变了1次虽然我在过去几年里找不到任何关于它的事情,或者现在越来越多的人推荐AGAINST密封课程,这要归功于改进在测试中(这是主要原因之一),处理器速度(速度差现在可以忽略不计)等.
我正在试图找出最新的天气指南是什么,或者不标记classes为sealed.
1 Essential C#6.0(第5版),Mark Michaelis(合着者Eric Lippert):
"一般来说,将一个类别标记为密封很少进行,并且只应保留那些有充分理由支持这种限制的情况.实际上,离开类型未开封的情况越来越令人满意,因为单元测试因为需要支持模拟(测试双重)对象创建来代替实际的实现."
这是硬拷贝证明,因为其他人都是口口相传.
sealed ×10
.net ×6
c# ×6
class ×2
inheritance ×2
oop ×2
class-design ×1
final ×1
internal ×1
overriding ×1
python ×1
singleton ×1
vtable ×1
windows-8 ×1
winrt-xaml ×1