Aracılığıyla paylaş


Türü Uzantıları (F#)

Türü uzantılarının önceden tanımlı nesne türü'ne yeni üye eklemenizi sağlar.

// Intrinsic extension.
type typename with
   member self-identifier.member-name =
      body
   ...
   [ end ]

// Optional extension.
type typename with
   member self-identifier.member-name =
      body
   ...
   [ end ]

Notlar

Biraz farklı bir sözdizimi ve davranış türü uzantıları iki biçimi vardır. Bir iç uzantısı aynı ad alanı veya modülü, aynı kaynak dosyası ve (dll veya yürütülebilir dosyası) aynı derlemenin görünen genişletilmekte türü olarak uzantısıdır. Bir isteğe bağlı bir uzantı özgün modülü, ad veya genişletilmekte türü derleme dışında görünen bir uzantısıdır. İç uzantılarına bağlı türü yansıtma tarafından incelenir, ancak isteğe bağlı uzantıları yapmak görünür. İsteğe bağlı uzantıları modüllerde olmalı ve uzantısı içeren modül açık olduğunda, yalnızca kapsam içindedir.

Önceki sözdiziminde, typename genişletilmiş türünü temsil eder. Erişilebilen her türlü genişletilmiş ancak gerçek türü adı, türü kısaltma türü adı olmalıdır. Birden çok üye türü uzantısını tanımlayabilirsiniz. self-identifier Gibi yalnızca sıradan üye çağrılmasını nesnesinin örneğini temsil eder.

end Hafif sözdiziminde isteğe bağlı anahtar sözcüktür.

Üye türü uzantıları tanımlandığı sınıf türü diğer üyeler gibi kullanılabilir. Diğer üyeleri gibi bunlar statik veya üyeleri örnek. Olarak da bilinen bu yöntem olan uzantısı yöntemleri; özellikler olarak bilinen uzantısı özelliklerive benzeri. İsteğe bağlı bir uzantı üyeleri için nesne örneği örtülü olarak ilk parametre olarak iletilen static üyeler için derlenir. Ancak, örnek üyeleri veya nasıl bildirilir uyarınca statik üyeleri oldukları gibi bunlar davranır. Örtülü uzantısı üye türü üye olarak yer alır ve kısıtlama kullanılabilir.

Uzantısı yöntemler sanal veya soyut yöntemi olamaz. Aynı ada sahip diğer yöntemleri aşırı yüklenebilir, ancak derleyici tercih uzantısı olmayan yöntemlere belirsiz bir çağrı olması halinde verir.

Birden çok iç türü uzantıları için bir tür varsa, tüm üyelerin benzersiz olması gerekir. İsteğe bağlı türü uzantıları için aynı tür için farklı tür uzantılarında üye aynı ada sahip olabilir. İstemci kodu aynı üye adlarını tanımlayan iki farklı kapsamlar açarsa belirsizlik hataları oluşur.

Aşağıdaki örnekte, bir modül içinde bir tür içsel türü uzantısı vardır. Normal bir üyesi olarak tüm açılardan yazıyla türü uzantısı modülü dışında istemci kodu için görüntülenir.

module MyModule1 =

    // Define a type.
    type MyClass() =
      member this.F() = 100

    // Define type extension.
    type MyClass with
       member this.G() = 200

module MyModule2 =
   let function1 (obj1: MyModule1.MyClass) =
      // Call an ordinary method.
      printfn "%d" (obj1.F())
      // Call the extension method.
      printfn "%d" (obj1.G())

Geçerli bir tür uzantıları tanımını bir tür bölümlere ayırmak için kullanabilirsiniz. Bu, derleyicinin ürettiði kod ve yazılmış kod ayrı tutmak için ya da farklı kişiler tarafından oluşturulan veya farklı işlevler ile ilişkili kod gruplamak için büyük tür tanımları yönetimine yararlı olabilir.

Aşağıdaki örnekte, isteğe bağlı türü uzantısına genişletir System.Int32 türü uzantısı yöntemi ile FromString , durağan üye çağıran Parse. testFromString Yöntemini gösterir yeni üyeye yalnızca gibi herhangi bir örnek üye olarak adlandırılır.

// Define a new member method FromString on the type Int32.
type System.Int32 with
    member this.FromString( s : string ) =
       System.Int32.Parse(s)

let testFromString str =  
    let mutable i = 0
    // Use the extension method.
    i <- i.FromString(str)
    printfn "%d" i

testFromString "500"

Yeni örnek üye diğer herhangi bir yöntem gibi görünür Int32 türü IntelliSense ancak yalnızca uzantısı içeren modülün kapsamı içinde açık ya da başka türlü olduğunda.

Ayrıca bkz.

Diğer Kaynaklar

F# dil başvurusu

Üyeler (F#)