Yanıtlar:
finalAnahtar kelime Java birkaç kullanımları vardır. Kullanılan bağlama bağlı olarak, C # ' da sealedve readonlyanahtar 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 virtualyö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 virtualişaretlemesi, C # ise bunları olarak işaretlemesidir sealed. Bu nedenle, yalnızca temel sınıfta sealedaçı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, readonlyanahtar kelimenin etkisi const, readonlyifadenin 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.
finalsınıf veya yöntem için C # eşdeğerisealed .finalalan için, C # eşdeğerireadonly .finalyerel 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# equivalentbüyük bir ayrım için.
constyalnı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 sealedeşdeğerdir final.
Geri kalanlara gelince, karmaşık.
İçin static finalalanlar, static readonlymü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.
constDeğiştirici sabitleri için oldukça benzer, ancak statik yapıcı bunları olamaz.
readonlykullanılabilir. Yine de eşit değildir - finalyapıcı veya başlatıcıda bile tam olarak bir ödev gerektirir.finalBildiğ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.