2009-03-04 22 views
0

Neden arayüzde statik yöntem türlerini belirleyemiyorum.Nesne Yönelimli Analiz ve Tasarım

Bunu yapmak için herhangi bir alternatif var mı?

Ancak, yalnızca soyut sınıfla iç içe geçen arabirimi kullanmalıyım. arayüzde acess belirtici specifing herhangi bir sorun

/

var mı?

Arabirimdeki olayları belirtmek istiyorum ve bu yalnızca korumalı sınıf tarafından erişilebilir olması gerektiğinden, bu etkinliğe korumalı erişim belirticisini istiyorum.

ve başka bir sınıftaki arabirimi kullanabilen belirli bir işlevim var, bu durumda, public acess belirticisini kullanabilirim.

+0

Ayrıca bkz. Http://stackoverflow.com/questions/512877/why-cant-i-define-a-static-method-in-a-java-interface – VonC

cevap

2

Hangi dili kullandığınızı bilmiyorum ama C# ile yanıtlayacağım.

Neden arayüzde statik yöntem türlerini belirleyemiyorum. Bunu yapmak için herhangi bir alternatif var mı?

Bunun nedeni, statik yöntemleri geçersiz kılabilirsiniz. Neye ulaşmaya çalışıyorsunuz?

Arabirimlerdeki üyeler her zaman C# 'da herkese açıktır. Başka koruma seviyelerine sahip olmanız gerekiyorsa, soyut bir sınıf kullanın. Arayüzden erişemiyorsanız korunan etkinliklerin amacı ne olurdu? Arayüz ile ilgisi yoktur (hatırlayın, arayüzün herhangi bir kodu olamaz). Eğer sadece uygulayıcı sınıfların olayları gündeme getirebileceğini düşünüyorsanız, onları kaldırabilecek tek kişi olduklarından emin olunuz. Olaylar bu şekilde inşa edilir - sadece sınıfın kendisi olayları arttırabilir. Sınıftan harici bir etkinlik oluşturamazsınız (sınıfta bir yönteminiz varsa, etkinliği yükseltirseniz).

1

Arayüzler sadece uygulayıcınızı halka açıklar. Bir arabirim için tek erişim değiştirici, ara yüzün kendisinde "dahili" dir, bu da aynı montajın tüm üyelerine veya "InternalsVisibleTo" özniteliği ile bilinenlere görülebilen bir arayüzdür.

Sadece uygulayıcıların belirli bir olayı görmesi gerekiyorsa, o zaman bu olay bir çeşit temel sınıfta olmalıdır.

Statik bir yöntem, prosedürel programlamanın bir hayli fazlasıdır. Onların kullanımları vardır (örneğin, uzatma metotlarına bakınız), fakat gerçekten OOP ile pek bir ilgisi yoktur.

0

İlk soruda ne demek istediğimi zedelem yapıyorum, ancak korumalı arabirimlerde korunma ile ilgili ikinci sorunuzu doğrudan "hayır" dır. Arabirimler "arabirimler" olarak adlandırılır, çünkü bu nesneyle iletişim kurabileceğiniz "arabirimi" (yani, genel yöntemleri) belirtirler.

0

OOP ile ilgili deneyimim Actionscript 3 ile ilişkilidir, ancak eminim göreceli.

Statik yöntemler overidden olamaz ve bir sınıf ata sınıfını uzattığında kullanılmazlar.

Arabirim PUBLIC yöntemlerini kurmak için kullanıldığından, erişim değiştiricileri arabirimde kullanılmaz.

AS3'te bir arabirim, yalnızca blok içermeyen, ancak veri türlerini içeren bir yöntem imzasıdır.

Alıcı/ayarlayıcı yöntem imzalarının bir arabirimde de kullanılabileceğini unutmamak gerekir. Bunlar yararlıdır ve sadece bir setter kullanıyorsanız, özel bir kapsüllenmiş değişkene salt okunur bir kamu erişimi oluşturdunuz.

Soyut sınıf yerine arabirim kadarıyla, kodunuzu nasıl uygulamak istediğinize bağlıdır. Çoğu zaman ve arayüz ve soyut bir sınıf, kalıtım ve polimorfizm (genişleme/uygulama) kullanarak farklı sonuçlar elde etmek için birlikte kullanılır.

İlgili konular