请问有人请告诉我下列使用sealed
不能编译的原因吗?然而,如果我将sealed
替换为final
并将其编译为Java,则它可以工作。C#密封vs Java final
private sealed int compInt = 100;
public bool check(int someInt)
{
if (someInt > compInt)
{
return true;
}
return false;
}
请问有人请告诉我下列使用sealed
不能编译的原因吗?然而,如果我将sealed
替换为final
并将其编译为Java,则它可以工作。C#密封vs Java final
private sealed int compInt = 100;
public bool check(int someInt)
{
if (someInt > compInt)
{
return true;
}
return false;
}
这是因为final
在Java中意味着很多不同的事情取决于你在C#中使用它,而sealed
适用只类和潜在的虚拟成员(方法,属性,事件)。
在Java final
可以应用于:
sealed
。virtual
,并且在派生类中,可以再次使用sealed
阻止其他派生类。readonly
。仅适用于类” - 它不是真的,它可以应用于C#中的方法。 – Maxim 2016-12-12 17:47:19
在C#
Sealed
只能应用于引用类型,并且对继承树影响。
在实践中,标记为sealed
的类型被保证为继承树中的最后一个“叶”,或者简而言之,您不能从类型为sealed
的类型中派生出类型。
public sealed class Child : Base
{
}
public class AnotherAgain : Child //THIS IS NOT ALLOWED
{
}
它不能应用于成员。
Tigran的答案没有错,而Joey's有点不正确。
首先你可以看看这个页面:What is the equivalent of Java's final in C#?。 sealed
关键字可应用于class
,instance method
和property
但不包括变量或接口的方法。 sealed
的类不能被继承。当sealed
穿戴方法时,必须由公司内的override
。每struct
是sealed
,所以struct
不能被继承。检查这一形象:
http://stackoverflow.com/questions/2069010/is-there-any-functional-difference-between-c-sharp-sealed-and-javas-final-keywo – 2012-04-16 08:13:05
相当于C#中成员的'final'是'readonly'。 “密封在C#中的 – 2012-04-16 08:14:40