2010-03-09 20 views
5

Biz CAD programı için bir SDK yazıyoruz ve işlevi belirli bir tip (değil farklı insanlar arasında sadece anlaşmazlık, benim iki beyin yarı arasındaki da anlaşmazlık) ilgili hafif anlaşmazlık haline çalıştırmak..Net SDK sorunu, hangi yoldan gidiniz?

belirli bir eğri türleri (elips, daire, yay, çizgi, Bezier vs.) sınıfları bir sürü düşünün. Tüm bu sınıflar bir Nurbs eğrisi ile temsil edilebilir. Bu yüzden Circle Circle-> Nurbs işlevini koymak gerekir:

public NurbsCurve Circle.ToNurbsCurve() 
{ 
    // Return a circular NurbsCurve or null if the Circle is invalid. 
} 

veya NurbsCurve statik olmalıdır: Bu bir, çünkü

public static NurbsCurve NurbsCurve.CreateFromCircle(Circle) 
{ 
    // Return a circular NurbsCurve or null if the Circle is invalid. 
} 
+0

Tek seçenek, uzantı yöntemleri olabilir. 'Kamu statik NurbsCurve ToNurbs (bu Çember daire) {}' Gerçekten burada anlamlı olmaz –

+2

@Chris, ... buna bir NurbsCurve değil NurbsCurve sınıfı için dönüştürücü nasıl olması gerektiğini bilir Çemberi. Uzantı yöntemleri harika bir özelliktir, ancak birçok kişi (benim dahil) onları aşırı kullanıyor –

cevap

4

hatta belki de ayrıca bir NurbsCurve dönüştürülebilen daha sonra diğer şekiller eklerseniz kolaylaştıracağını çünkü) IConvertibleToNurbsCurve gibi ortak bir temel sınıf veya arayüzü ile. NurbsCurve

daha uzmanlaşmış türleri IMHO hakkında "bilmek" olmamalı bu nedenle daha az özelleşmiş gibi görünüyor ve.

+0

Teşekkürler Lucero. Daha sonra daha fazla ders ekleme hakkında iyi bir nokta. –

1

ben Circle sınıfta koymak olacağını NurbsCurve'a nasıl dönüştürüleceğini bilir. NurbsCurve sınıfının, belirli tüm eğri türlerini bilmesi beklenmez. Bu şekilde, yeni bir eğri türü oluşturursanız, NurbsCurve sınıfını değiştirmeniz gerekmez. BTW

, hepinizin eğrileri tarafından uygulanan bir arayüzde ToNurbsCurve yöntem bildirmek önermek (veya soyut temel sınıf sanal ilan) Ben şekil sınıfları üzerinde örneğin (ilk gitmek düşünüyorum

+0

Teşekkürler Thomas. Arayüz yorumu ile ilgili olarak, maalesef birçok farklı ToXxxx() işlevine sahibiz, bu yüzden hepsi için arayüzler biraz hantal hale gelirdi. –

İlgili konular