2014-07-16 28 views
6

Son zamanlarda aşağıdaki kodla koştu: TemeldeNeden bir sınıfı yalnızca 1 statik işlevle yapıyorsunuz?

interface 

TSomeClass=Class 
public 
    class function SomeFunction(sMyString: string) : ISomeInterface; 
end; 

implementation 

TSomeClass.SomeFunction(sMyString: string) : ISomeInterface; 
begin 
    ...Get some dependency. 
end; 

bir sınıf içinde 1 sınıf fonksiyonu ile.

Bu yapının, bir ünitenin bir parçası olmaksızın sadece bir işlevde bulunmasıyla ilgili yararı nedir?

gibi: Büyük ölçüde kişisel tercih aşağı gelir

interface 
function SomeFunction(sMyString: string) : ISomeInterface; 

implementation 

SomeFunction(sMyString: string) : ISomeInterface; 
begin 
    ...Get some dependency. 
end; 
+1

Bu konuyla ilgili bazı tartışmalar bulabilirsiniz. [bu soruda] 'da (http://programmers.stackexchange.com/q/232145/38875). – TLama

+2

Belki "nesne prosedürü" isteyen başka bir sınıfa takılması gerekiyorsa ... –

cevap

9

. Bununla birlikte, sınıf fonksiyonunun sağladığı tek fayda, isim alanlarının sahte olması için bir araçtır. Kullanmak istediğiniz işlev adının oldukça kısa ve genel olduğunu varsayalım. Bu durumda farklı bir ünitede tanımlanan aynı ada sahip başka bir sembol ile çarpışabilir. Hangi noktada ünite kullanım emrinin hükümlerine tabi olabilirsiniz ve ismin tamamen nitelendirilmesi gerekebilir. Bir sınıf işlevi kullanarak, kullanıcıyı işlev adını sınıfıyla nitelendirmeye zorlarsınız.

Burada yapılması gereken bir diğer nokta, sunduğunuz iki alternatifin potansiyel olarak önemli bir farklılığa sahip olmasıdır. Sorunuzdaki sınıf işlevinin bir Self işaretçisi vardır. Bir örnek yönteminden farklı olarak, bu bir örnek yerine sınıfı ifade eder. İki işlevi tamamen eşdeğer hale getirmek için, sınıf işlevinin static olmasını bildirirsiniz. Statik olmayan sınıf fonksiyonu ile yapılabilir

Elbette
class function SomeFunction(sMyString: string): ISomeInterface; static; 

, bir şey, bir of object yöntem türü gereklidir nerede kullanılabilir olmasıdır.

İlgili konular