Yanıtlar:
final
Anahtar kelime Java birkaç kullanımları vardır. Kullanılan bağlama bağlı olarak, C # ' da sealed
ve readonly
anahtar kelimelere karşılık gelir .
Alt sınıflamayı (tanımlanan sınıftan miras) önlemek için:
Java
public final class MyFinalClass {...}
C #
public sealed class MyFinalClass {...}
Bir virtual
yöntemin geçersiz kılınmasını önleyin .
Java
public class MyClass
{
public final void myFinalMethod() {...}
}
C #
public class MyClass : MyBaseClass
{
public sealed override void MyFinalMethod() {...}
}
Joachim Sauer'ın işaret ettiği gibi, buradaki iki dil arasında dikkate değer bir fark, Java'nın varsayılan olarak tüm statik olmayan yöntemleri olduğu gibi virtual
işaretlemesi, C # ise bunları olarak işaretlemesidir sealed
. Bu nedenle, yalnızca temel sınıfta sealed
açıkça işaretlenmiş bir yöntemin geçersiz kılınmasını durdurmak istiyorsanız , yalnızca C # ' da anahtar kelimeyi kullanmanız gerekir virtual
.
Bir değişkenin yalnızca bir kez atanmasına izin vermek için:
Java
public final double pi = 3.14; // essentially a constant
C #
public readonly double pi = 3.14; // essentially a constant
Bir yan not olarak, readonly
anahtar kelimenin etkisi const
, readonly
ifadenin derleme zamanı yerine çalışma zamanında değerlendirilmesinden ve dolayısıyla rasgele ifadelere izin verilmesinden anahtar kelimeden farklıdır .
readonly
Üye değişkeni olabilir kurucular değiştirilebilir: pastebin.com/AzqzYGiA
Bu koşullara bağlıdır.
final
sınıf veya yöntem için C # eşdeğerisealed
.final
alan için, C # eşdeğerireadonly
.final
yerel değişken veya yöntem parametresi, doğrudan C # eşdeğer var.For a final local variable or method parameter, there's no direct C# equivalent
büyük bir ayrım için.
const
yalnızca değer türlerinde kullanılabilir. Bildiğim kadarıyla yerel bir referans türü için etkili bir sabit oluşturmanın bir yolu yok.
Buradaki herkesin eksik olduğu şey Java'nın son üye değişkenler için kesin atama garantisidir.
Son üye değişkeni V olan bir sınıf C için, her C kurucusundaki olası her yürütme yolu, V'yi tam olarak bir kez atamalıdır - V'yi atamamak veya V'yi iki veya daha fazla kez atamak hataya neden olur.
C # 's salt okunur anahtar sözcüğü böyle bir garanti yoktur - derleyici salt okunur üyeleri atanmamış bırakmak veya bir kurucu içinde birden çok kez atamak için izin vermekten mutluluk duyar.
Dolayısıyla, final ve salt okunur (en azından üye değişkenlere göre) kesinlikle eşdeğer değildir - final çok daha katıdır.
Belirtildiği gibi, yöntemler ve sınıflar için sealed
eşdeğerdir final
.
Geri kalanlara gelince, karmaşık.
İçin static final
alanlar, static readonly
mümkün olan en yakın şeydir. Statik alanı, Java'daki statik başlatıcıya oldukça benzer bir statik yapıcıda başlatmanıza izin verir. Bu hem sabitler (ilkel ve değişmez nesneler) hem de değişebilir nesnelere sürekli referanslar için geçerlidir.
const
Değiştirici sabitleri için oldukça benzer, ancak statik yapıcı bunları olamaz.
readonly
kullanılabilir. Yine de eşit değildir - final
yapıcı veya başlatıcıda bile tam olarak bir ödev gerektirir.final
Bildiğim bir yerel değişken için C # eşdeğeri yok . Herhangi birinin neden buna ihtiyacı olduğunu merak ediyorsanız: if-else, switch-case vb. Öncesinde bir değişken bildirebilirsiniz . Nihai olduğunu beyan ederek, en fazla bir kez atandığını zorunlu tutuyorsun.
Java yerel değişkenlerinin genel olarak okunmadan önce en az bir kez atanmaları gerekir. Şube, değer okunmadan önce atlamadığı sürece, son değişken tam olarak bir kez atanır. Tüm bunlar derleme zamanı kontrol edilir. Bu, bir hata için daha az marj ile iyi davranılmış bir kod gerektirir.
Özetle, C # 'nin doğrudan eşdeğeri yoktur final
. Java, C # 'ın bazı güzel özelliklerinden yoksun olsa da, çoğunlukla bir Java programcısı olarak C #' ın eşdeğer bir ürünü sunmadığını görmek benim için ferahlatıcı.
Java sınıfı finali ve yöntem finali -> mühürlü. Java üye değişkeni final -> çalışma zamanı sabiti için salt okunur, derleme zamanı sabiti için sabit.
Yerel Değişken finali ve yöntem bağımsız değişkeni finali için eşdeğer değil
C # sabitleri derleme zamanı sabitleri için const anahtar sözcüğü veya çalışma zamanı sabitleri için salt okunur anahtar sözcük kullanılarak bildirilir. Sabitlerin semantiği hem C # hem de Java dillerinde aynıdır.