ISomeBehavior uygulamasını uygulayan iki sınıfa sahibim. Şimdi işlevsellik paylaşmalarını istiyorum. Normalde, ISomeBehavior yerine, SomeBehaviorBase gibi soyut bir sınıfla yer değiştirirdim. Sorun, alt sınıflardan birinin zaten başka bir sınıftan türediği ve diğer sınıfın sahip olduğumuz bir yazılım olmadığıdır. (Bu C#, çok sayıda miras, bir seçenek değildir.) 3. parti sınıfından türeyen alt sınıfın hiçbir uygulaması yoktur. Sadece 3. parti sınıfından türetilir ve ISomeBehavior uygular, böylece 3. taraf sınıfı ISomeBehavior'ı uygulayan diğer alt sınıflarla aynı şekilde ele alınabilir.Alt sınıflar, zaten farklı bir temel sınıftan türetildiğinde davranışları nasıl paylaşabilir?
Şu an için yaptığım, ISomeBehavior üzerinde bir uzantı yöntemi uygular. Şimdi tüketen kod yöntemini çağırabilir. Bu yaklaşımdaki sorun, bu kodlama yöntemini kullanmak için çağrı kodunu zorlamak istemem. Uzantı yönteminin sonunda çağırması gerektiğinden, SomeMethod() öğesini arabirimden kaldıramıyorum.
iki sınıfları zarif aynı davranışı paylaşmasına izin konusunda herhangi bir fikir, bir tanesi zaten başka türetilmiştir, üçüncü şahıs, sınıf? Not: Strateji tasarım deseni, buradaki mantıklı gibi görünür, ancak bu model, alt sınıflar arasında davranışı arasında değiştiğinde kullanılır. Buradaki davranış farklı değil; Sadece paylaşılması gerekiyor. http://www.codeproject.com/KB/architecture/smip.aspx
GJ
SomeMethod() nedir? Bunu yalnızca ikinci paragrafta, bunu kaldıramayacağınızı söylüyorsunuz - ama neden * hakkında bir fikir vermeden * bunu kaldırmak istersiniz. –
SomeMethod() öğesini kaldırmak istiyorum, bu nedenle istemci kodu kullanamaz. Uzantı yöntemi buna rağmen arayacaktır. Ve istemci kodu uzatma yöntemini çağırır. Uzantı yöntemi temelde SomeMethod(), ancak iki ek parametredir. Bu, SomeMethod() 'ın SomeMethod'u çağırmadan önce bazı işlemleri yapmasına izin verir. –