Bu strateji, bunun beğenilerini değiştirmeyi içerir:
public class Politician
{
public const int Infidelity = 0;
public const int Embezzlement = 1;
public const int FlipFlopping = 2;
public const int Murder = 3;
public const int BabyKissing = 4;
public int MostNotableGrievance { get; set; }
}
İle:
public class Politician
{
public MostNotableGrievance MostNotableGrievance { get; set; }
}
public class MostNotableGrievance
{
public static readonly MostNotableGrievance Infidelity = new MostNotableGrievance(0);
public static readonly MostNotableGrievance Embezzlement = new MostNotableGrievance(1);
public static readonly MostNotableGrievance FlipFlopping = new MostNotableGrievance(2);
public static readonly MostNotableGrievance Murder = new MostNotableGrievance(3);
public static readonly MostNotableGrievance BabyKissing = new MostNotableGrievance(4);
public int Code { get; private set; }
private MostNotableGrievance(int code)
{
Code = code;
}
}
Neden bu tür bir numaralandırma yapmak için tam olarak tercih edilir, şöyle:
public class Politician
{
public MostNotableGrievance MostNotableGrievance { get; set; }
}
public enum MostNotableGrievance
{
Infidelity = 0,
Embezzlement = 1,
FlipFlopping = 2,
Murder = 3,
BabyKissing = 4
}
Türle ilişkili bir davranış yoktur ve eğer olsaydı, yine de farklı bir tür yeniden düzenleme kullanacaksınız, örneğin, 'Tür Kodunu Alt Sınıflarla Değiştir' + 'Koşullu Polimorfizmle Değiştir'.
Ancak, yazar neden bu yönteme (Java'da?) Kaşlarını çattığını açıklıyor:
Sayısal tür kodları veya numaralandırmalar, C tabanlı dillerin ortak bir özelliğidir. Sembolik isimlerle oldukça okunabilir olabilirler. Sorun, sembolik ismin sadece bir takma ad olmasıdır; derleyici hala temel numarayı görüyor. Derleyici türü, sembolik adı değil 177 sayısını kullanarak kontrol eder. Tür kodunu bağımsız değişken olarak alan herhangi bir yöntem bir sayı bekler ve sembolik bir adı kullanılmaya zorlayacak hiçbir şey yoktur. Bu, okunabilirliği azaltabilir ve bir hata kaynağı olabilir.
Ancak bu ifadeyi C # 'a uygulamaya çalışırken, bu ifade doğru görünmüyor: numaralandırma aslında bir sınıf olarak kabul edildiğinden sayı kabul etmiyor. Yani aşağıdaki kod:
public class Test
{
public void Do()
{
var temp = new Politician { MostNotableGrievance = 1 };
}
}
Derlenmeyecek. Peki, bu yeniden düzenleme C # gibi daha yeni üst düzey dillerde gerekli olmayabilir mi, yoksa bir şey düşünmüyor muyum?
var temp = new Politician { MostNotableGrievance = MostNotableGrievance.Embezzlement };