"Scala编程"中描述了密封类,但密封特性不是.我在哪里可以找到有关密封特性的更多信息?
我想知道,如果密封的特性与密封的类相同吗?或者,如果没有,有什么区别?何时使用密封特性(何时不是)?
是否有任何类在静态类中实现?手段:
static class ABC : Anyclass
Run Code Online (Sandbox Code Playgroud)是否有任何类可以在密封类和静态类中继承?
手段:
static class ABC : AClass {}
Run Code Online (Sandbox Code Playgroud)
和
sealed class ABC : AClass {}
Run Code Online (Sandbox Code Playgroud)我在某种程度上可能是错的吗?
sealed abstract和abstractScala类有什么区别?
我正在查看一些C#代码,以扩展VS2010中的语言支持(Ook示例).我看到一些叫做的课程internal sealed class
这些怎么办?会用它们吗?
谢谢
我是否应该密封我知道的所有课程,即使没有明显的性能或安全问题,也不应该将其作为基类,或者这只是增加了什么?
我只是想知道是否有可能在Scala中迭代密封的特征?如果没有,为什么不可能?由于特性是密封的,应该可以吗?
我想做的是这样的:
sealed trait ResizedImageKey {
/**
* Get the dimensions to use on the resized image associated with this key
*/
def getDimension(originalDimension: Dimension): Dimension
}
case class Dimension(width: Int, height: Int)
case object Large extends ResizedImageKey {
def getDimension(originalDimension: Dimension) = Dimension(1000,1000)
}
case object Medium extends ResizedImageKey{
def getDimension(originalDimension: Dimension) = Dimension(500,500)
}
case object Small extends ResizedImageKey{
def getDimension(originalDimension: Dimension) = Dimension(100,100)
}
Run Code Online (Sandbox Code Playgroud)
通过给枚举值赋予实现,我可以用Java完成.Scala中有同等的东西吗?
任何人对是否有任何意见IEquatable<T>或IComparable<T>一般应要求T是sealed(如果是class)?
这个问题发生在我身上,因为我正在编写一组旨在帮助实现不可变类的基类.基类要提供的部分功能是自动实现相等比较(使用类的字段以及可应用于字段来控制相等比较的属性).当我完成时它应该是相当不错的 - 我正在使用表达式树为每个动态创建一个编译的比较函数T,因此比较函数应该非常接近正则相等比较函数的性能.(我使用键入的不可变字典System.Type和双重检查锁定以合理的方式存储生成的比较函数)
尽管如此,有一件事是用来检查成员字段相等性的函数.我的初衷是检查每个成员字段的类型(我将调用X)是否实现IEquatable<X>.但是,经过一番思考后,除非X是这样,否则我认为这是不安全的sealed.原因在于,如果X不是sealed,我无法确定是否X正确地将等式检查委托给虚拟方法X,从而允许子类型覆盖相等比较.
这就提出了一个更普遍的问题 - 如果一个类型没有被密封,它是否应该真正实现这些接口?我想不会,因为我认为接口契约是比较两种X类型,而不是两种类型,可能是也可能不是X(虽然它们当然必须是X或者是子类型).
你们有什么感想?应该IEquatable<T>和IComparable<T>避免对开封类?(也让我想知道是否有一个fxcop规则)
我现在的想法是让我产生比较功能只能用IEquatable<T>在成员字段,其T为sealed,而是用虚拟的Object.Equals(Object obj),如果T是密封的,即使T工具IEquatable<T>,因为该领域可能的潜在店亚型T和我怀疑的大多数实现IEquatable<T>适当设计的传承.
我是C#的新手.我正在读关于密封的关键字.我有关于密封的类.我读了一条关于密封方法的线,我们也可以制作密封方法.线是(通过声明方法密封,我们可以避免进一步重写这个方法.)我已经创建了一个demo但是没有理解上面的行和密封方法的含义使用.以下是我的代码: -
using System;
namespace ConsoleApplication2
{
class Program:MyClass
{
public override sealed void Test()
{
Console.WriteLine("My class Program");
}
static void Main(string[] args)
{
Program obj = new Program();
obj.Test();
Console.ReadLine();
}
}
class MyClass
{
public virtual void Test()
{
Console.WriteLine("My class Test");
}
}
}
Run Code Online (Sandbox Code Playgroud)
请告诉我为什么我们使用密封方法以及密封方法的优点.
我只是想知道,因为密封关键字的存在表明它是类作者关于是否允许其他类继承它的决定,为什么默认情况下没有类密封,有一些关键字将它们显式标记为可扩展?
我知道它有些不同,但访问修饰符以这种方式工作.默认情况下是限制性的,只有通过插入关键字才能获得更全面的访问权限.
尽管如此,我很有可能没有想到这一点,所以请保持人性化!
sealed ×10
c# ×6
class ×3
scala ×3
inheritance ×2
.net ×1
abstract ×1
c++ ×1
coding-style ×1
enumeration ×1
icomparable ×1
iequatable ×1
immutability ×1
oop ×1
scala-macros ×1
static ×1
traits ×1