Hayvanların yaptıklarını ve hayvanların nasıl göründüğünü modellemeye çalışıyorum ve her bir hayvanın kodunu ve eylemlerin kodu da ayrı ayrı tutmak istiyorum. Bunu C# ile nasıl modelleyebilirim?Endişelerin ayrılması ve polimorfik tasarım
Bu ideal olacaktır: Eğer doğru anlamak Paint
değil Paint(Cat)
veya Paint(Dog)
gibi Paint(Animal)
olarak tanımlanır eğer
using System.Collections.Generic;
class PaintingAnimals {
class Animal {}
class Cat : Animal {}
class Dog : Animal {}
static void Paint(Cat cat) { System.Console.WriteLine("Cat"); }
static void Paint(Dog dog) { System.Console.WriteLine("Dog"); }
static void Paint(Animal animal) { System.Console.WriteLine("Animal"); }
public static void Main() {
var animals = new List<Animal> {new Cat(), new Dog()};
foreach (var animal in animals) {
Paint(animal); // Always prints "Animal" not "Cat" or "Dog"
}
}
}
Ancak, bu kodu yalnızca derlemek ve bu nedenle ben benim kod bölemezsiniz Her bir hayvan, Köpekler ve Kediler gibi farklı fonksiyonlara farklı şekilde boyanacaktır. uygun gördüğü şekilde her somut Hayvan sınıf Boya yöntemi uygulayacak
static void Main() {
var animals = new List<Animal> {new Cat(), new Dog()};
foreach (var animal in animals) {
animal.Paint();
}
}
: Eğer parametre olarak hayvanla bir yöntemi çağırmak değil, ama daha ziyade hayvan AÇIK bir yöntem aramak istediğiniz ne
Bunu yapmanın pek çok yolu var ... Seçenek olarak göz atın [ziyaretçi kalıbı] (https://en.wikipedia.org/wiki/Visitor_pattern) - olasılıkla 'Piant ((dinamik) hayvan) ile uygulanır 've Paint (Cat)' ın tam seti ... geçersiz kılar. –
"Her iki nesne için aynı kod" ne demek istediğini anlamıyorsunuz, Boya işlevinizi gösterebilir misiniz? –
@AlexeiLevenkov Ziyaretçi kalıbı! Faydalı işaretçi, teşekkürler. – user12341234