Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Bu içerik, Çerçeve Tasarım Yönergeleri: Kurallar, Deyimler ve Yeniden Kullanılabilir .NET Kitaplıkları için Desenler, 2. Sürüm'den Pearson Education, Inc.'in izniyle yeniden yazdırılır. Bu baskı 2008'de yayımlandı ve kitap o zamandan beri üçüncü baskıda tamamen revize edilmiştir. Bu sayfadaki bazı bilgiler güncel olmayabilir.
İşleç aşırı yüklemeleri, çerçeve türlerinin yerleşik dil temel bileşenleriymiş gibi görünmesini sağlar.
İzin verildiği ve bazı durumlarda yararlı olduğu hâlde, işleç aşırı yüklemeleri dikkatli kullanılmalıdır. Çerçeve tasarımcılarının basit yöntemler olması gereken işlemler için işleçleri kullanmaya başlaması gibi işleç aşırı yüklemenin kötüye kullanıldığı birçok durum vardır. Aşağıdaki yönergeler, işleç aşırı yüklemesinin ne zaman ve nasıl kullanılacağına karar vermenize yardımcı olmalıdır.
❌ İlkel (yerleşik) türler gibi hissetmesi gereken türler dışında işleç aşırı yüklemelerini tanımlamaktan KAÇıNıN.
✔️ İlkel bir tür gibi hissetmesi gereken bir türdeki işleç aşırı yüklemelerini tanımlamayı GÖZ ÖNÜNDE BULUNDURUN.
Örneğin, System.Stringoperator== ve operator!= tanımlıdır olarak sahiptir.
✔️ DO, sayıları temsil eden yapılarda işleç aşırı yüklemelerini tanımlar (örneğin System.Decimal).
❌ İşleç aşırı yüklemelerini tanımlarken sevimli OLMAYIN.
İşleç aşırı yüklemesi, işlemin sonucunun hemen belli olduğu durumlarda kullanışlıdır. Örneğin, bir DateTime'yi başka bir DateTime'den çıkarıp bir TimeSpan almak mantıklıdır. Ancak, mantıksal birleşim işlecini kullanarak iki veritabanı sorgularını bir arada kullanmak veya bir akışa yazmak için shift işlecini kullanmak uygun değildir.
❌ İşlenenlerden en az biri aşırı yüklemeyi tanımlayan türde olmadıkça işleç aşırı yüklemeleri SAĞLAMAYIN.
✔️ İşleçleri simetrik bir şekilde aşırı yükleyin.
Örneğin, operator== öğesini aşırı yüklerseniz, operator!= öğesini de aşırı yüklemelisiniz. Benzer şekilde, eğer operator< öğesini aşırı yüklerseniz, kaçınılmaz olarak operator> öğesini de aşırı yüklemelisiniz, ve benzeri.
✔️ Her aşırı yüklenmiş işlec için uygun adlar taşıyan yöntemler sağlamayı GÖZ ÖNÜNDE BULUNDURUN.
Birçok dil işleç aşırı yüklemesini desteklemez. Bu nedenle, aşırı yükleme işleçleri türlerinin eşdeğer işlevsellik sağlayan uygun etki alanına özgü ada sahip ikincil bir yöntem içermesi önerilir.
Aşağıdaki tabloda işleçlerin listesi ve buna karşılık gelen kolay yöntem adları yer alır.
| C# İşleci Simgesi | Meta Veri Adı | Dostça İsim |
|---|---|---|
N/A |
op_Implicit |
To<TypeName>/From<TypeName> |
N/A |
op_Explicit |
To<TypeName>/From<TypeName> |
+ (binary) |
op_Addition |
Add |
- (binary) |
op_Subtraction |
Subtract |
* (binary) |
op_Multiply |
Multiply |
/ |
op_Division |
Divide |
% |
op_Modulus |
Mod or Remainder |
^ |
op_ExclusiveOr |
Xor |
& (binary) |
op_BitwiseAnd |
BitwiseAnd |
| |
op_BitwiseOr |
BitwiseOr |
&& |
op_LogicalAnd |
And |
|| |
op_LogicalOr |
Or |
= |
op_Assign |
Assign |
<< |
op_LeftShift |
LeftShift |
>> |
op_RightShift |
RightShift |
N/A |
op_SignedRightShift |
SignedRightShift |
N/A |
op_UnsignedRightShift |
UnsignedRightShift |
== |
op_Equality |
Equals |
!= |
op_Inequality |
Equals |
> |
op_GreaterThan |
CompareTo |
< |
op_LessThan |
CompareTo |
>= |
op_GreaterThanOrEqual |
CompareTo |
<= |
op_LessThanOrEqual |
CompareTo |
*= |
op_MultiplicationAssignment |
Multiply |
-= |
op_SubtractionAssignment |
Subtract |
^= |
op_ExclusiveOrAssignment |
Xor |
<<= |
op_LeftShiftAssignment |
LeftShift |
%= |
op_ModulusAssignment |
Mod |
+= |
op_AdditionAssignment |
Add |
&= |
op_BitwiseAndAssignment |
BitwiseAnd |
|= |
op_BitwiseOrAssignment |
BitwiseOr |
, |
op_Comma |
Comma |
/= |
op_DivisionAssignment |
Divide |
-- |
op_Decrement |
Decrement |
++ |
op_Increment |
Increment |
- (unary) |
op_UnaryNegation |
Negate |
+ (unary) |
op_UnaryPlus |
Plus |
~ |
op_OnesComplement |
OnesComplement |
Aşırı Yükleme İşleci ==
Aşırı yükleme operator == oldukça karmaşıktır. İşlecin semantiğinin birkaç üye ile, gibi Object.Equals, uyumlu olması gerekir.
Dönüştürme İşleçleri
Dönüştürme işleçleri, bir türden diğerine dönüştürmeye izin veren birli işleçlerdir. İşleçler işlenende veya dönüş türünde statik üyeler olarak tanımlanmalıdır. İki tür dönüştürme işleci vardır: örtük ve açık.
❌ Bu tür bir dönüştürme son kullanıcılar tarafından açıkça beklenmiyorsa dönüştürme işleci SAĞLAMAYIN.
❌ Bir türün etki alanı dışında dönüştürme işleçleri TANıMLAMAYIN.
Örneğin, Int32, Doubleve Decimal tüm sayısal türlerdir, ancak DateTime değildir. Bu nedenle, Double(long) 'u DateTime'e dönüştüren bir dönüştürme işleci olmamalıdır. Böyle bir durumda yapıcı tercih edilir.
❌ Dönüştürme potansiyel olarak kayıplıysa örtük bir dönüştürme işleci SAĞLAMAYIN.
Örneğin, Double'nin kapsadığı aralık, Int32'ün kapsadığı aralıktan daha geniş olduğundan Double'den Int32'e örtük bir dönüşüm olmamalıdır. Dönüştürme potansiyel olarak kayıplı olsa bile açık bir dönüştürme işleci sağlanabilir.
❌ Örtük tür dönüşümlerinden istisnalar FIRLATMAYIN.
Son kullanıcıların ne olduğunu anlaması çok zordur, çünkü bir dönüştürmenin gerçekleştiğinin farkında olmayabilirler.
✔️ Dönüşüm işlecine yapılan bir çağrı, kayıplı bir dönüşümle sonuçlanırsa ve işlecin sözleşmesi kayıplı dönüşümlere izin vermiyorsa, istisna atın System.InvalidCastException.
Porsiyonlar © 2005, 2009 Microsoft Corporation. Tüm hakları saklıdır.
Pearson Education, Inc. tarafından Krzysztof Cwalina ve Brad Abrams'ın Yeniden Kullanılabilir .NET Kütüphaneleri için Çerçeve Tasarım Yönergeleri: Sözleşmeler, Deyimler ve Kalıplar, 2. Baskı eserinden izniyle yeniden basılmıştır. Addison-Wesley Professional tarafından Microsoft Windows Geliştirme Serisi kapsamında 22 Ekim 2008'de yayımlanmıştır.