Visual C# 2005 Beta 1

gilad g

New member
../images/Emo41.gifVisual C# 2005 Beta 1../images/Emo41.gif

בעקבות ההשקה החגיגית של הדור הבא (2005) של כל מה שקשור בתכנות בדוט נט, (וגם בעקבות הזמן הפנוי שנוצר מהרגילה שלקחתי
) חשבתי שיהיה ראוי לציין כמה מהתכונות החדשות של #C גרסה 2.0. 1.Generics מה כבר יש לכתוב על Generics שעוד לא נכתב?
ובכל זאת, למי שמגיע מעולם ++C, הרעיון של Generics לא יהיה זר לו, כיוון שהוא דומה ל-Templates של ++C. לטובת מי שלא יודע מה זה templates, אני אסביר: Generics היא היכולת לכתוב מחלקות (או interfaces או delegates או מתודות אפילו) כלליות, שמשתנות במקצת בהתאם לפרמטר type שונה. לדוגמא, למחלקה List יהיה יישום שונה אם הרשימה היא רשימה של int או של string. זה אומר שאפשר לכתוב מחלקה מסוימת באופן כללי, לדוגמא <List<T, ורק כשמשתמשים בה "למלא את החסר", ולציין את הסוג של הרשימה - <List<int>, List<string>, List<MyClass. ניתן גם להעביר כמה פרמטרים, כמו במקרה של Dictionary, שבו מציינים מהו הסוג של המפתח, ומהו הסוג של הערך. לדוגמא: <Dictionary<int, string. Generics קודם כל נותן לנו type safety. עד עכשיו, בגרסאות המוקדמות יותר של דוט נט, היינו צריכים להצהיר על ArrayList שיכול להכיל object-ים. מצב זה יכול לגרום (שלא בכוונה), להכנסת משתנים מטיפוסים לא נכונים לרשימה, שכן אין ממש בדיקה על הסוג של מה שנכנס לרשימה. את ה-Exception נקבל כשננסה לעשות casting כששולפים את המשתנה מהרשימה. דוגמא:
ArrayList al = new ArrayList(); // we can put both strings and ints in the list - no type-safety. al.Add(1); al.Add("Hello world"); int x = (int)al[0]; // ugly casting. int y = (int)al[1]; // woops! InvalidCastException will be thrown!​
ב-Generics, כל הבדיקות האלו נעשות ב-compile time, כיוון שהגדרנו מראש מאיזה סוג הרשימה שלנו:
List<int> myList = new List<int>(); myList.Add(24); myList.Add("bla bli blo"); //Throws a compile time error! int x = myList[0]; // Look ma, no casting! :)
החסכון ב-casting חוסך גם בביצועים. עם generics, ה-CLR לא צריך לבדוק שה-cast שלנו מתאים, והכי חשוב - אין צורך בפעולות box ו-unbox יקרות כשמתעסקים עם primitives. כמו כן, גם מתודות, interfaces, ו-delegates יכולים להיות ג'נריים, לדוגמא:
public T Add(T value1, T value2) { //.... }​
ניתן גם להוסיף constaints על אובייקטים גנריים, אבל זה לא הזמן והמקום לפרט
מי שרוצה ללמוד עוד על Generics - http://lab.msdn.microsoft.com/library/en-us/dv_csref/html/75ea8509-a4ea-4e7a-a2b3-cf72482e9282.asp?frame=true 2. Iterators איטרטורים הם מתודות, שמחזירות מספר רב של ערכים, שניתן לעבור עליהם באמצעות לולאת foreach. בעצם, המתודות האלו מחזירות IEnumerable, שהוא כמו "מצביע" לרשימה שמחזירים. במתודה איטרטורית תופיע לולאה אחת לפחות, עם הוראת yield return, שאומרת שאנחנו מוסיפים את הערך לרשימה המוחזרת.. לדוגמא:
public IEnumerable GetValues() { for (int i = 0; i < m_List.Count; i++) { yield return m_List; } }

היתרון פה הוא שהמתודה נקראת, תוך כדי מעבר חיצוני של מי שקרא לה על הנתונים המוחזרים. מי שרוצה ללמוד עוד על Iterators - http://lab.msdn.microsoft.com/library/en-us/dv_csref/html/f45331db-d595-46ec-9142-551d3d1eb1a7.asp?frame=true. 3. Anonymous Methods בגדול, מתודות אנונימיות, כשמן כן הן - מתודות ללא שם. מתודות אלו נוצרות on the fly, ע"י הקומפיילר. ניתן למקם מתודה אנונימית בכל מקום שבו הקומפיילר מצפה שיהיה delegate, לדוגמא:
myButton.Click += delegate { MessageBox.Show("Forum .net rules"); };​
זה עוזר לנו ליצור קוד נקי יותר, ללא תופעות כמו מתודות שנוצרות "רק בשביל ה-event", כמו myButton_Click, או MyThread_Work, וכו'. מתודות אנונימיות הוא נושא גדול יותר, לפרטים: http://lab.msdn.microsoft.com/library/en-us/dv_csref/html/a62441fa-f0a3-4acb-9aa6-93762a635275.asp?frame=true. 4. Partial Classes יצירת partial classes היא היכולת לכתוב מחלקה הנפרשת על פני יותר מקובץ אחד. את זה משיגים ע"י הכללת המילה partial בהצהרה על המחקלה:
// myFile1.cs public partial class X { public void f(); } //myFile2.cs public partial class X { public int z; }​
בדוגמה, הצהרנו למעשה על מחלקה אחת, שההצהרה עליה נפרשת על פני שני קבצים. הפיצ'ר הנחמד הזה מקל את החיים על designers למיניהם, כאשר חצי אחד של המחלקה נכתב ע"י ה-designer בקובץ אחד, והחצי השני שנכתב ע"י המתכנת נמצא בקובץ שני. ישנם עוד כל מיני תוספות קטנות לשפה כמו static classes, accessor accesibility, וכו'. ניתן לקרוא עליהן ב-MSDN. בתקווה לעוד רגילות בקרוב
גלעד.
 

adam222

New member
איך כבר |רגילה|../images/Emo35.gif

הצבא של היום, הוא לא הצבא של פעם
לגופו של ענין... נראה מרשים, שיגיע כבר
 

MightyMonk

New member
Generics

אחלה, המתנתי הרבה לזה ברוך השם, אני מקווה שיכניסו עוד מצייני גישה בנוסף כמו Public Protected שייאפשר הורשה ממחלקה שהיא Friend ל- Public ישנם הרבה מצבים בהם צריך שמחקלת הבסיס לא תהיה נגישה מסיבות כאלו ואחרות, וברצוננו לחשוף חלק מהפונקציות שלה בהורשה למחלקה שהנה Public, במצב הנתון לא ניתן לעשות זאת לצערי ואני משתמש בכמה טכניקות לבצע זאת מקווה שיפשטו את זה.
 

gilad g

New member
אם אני לא טועה,

מה שתיארת עכשיו זה protected... או שלא הבנתי אותך נכון
 

MightyMonk

New member
כן זה Protected אבל ...

אבל במצב הקיים אתה לא יכול להוריש ממחלקחה שהיא Friend ל- Public מסיבה פשוטה שאתה תחשוף את כל הפונקציות שבמחלקה, דבר זה ניתן רק להפך ולפעמים אתה רוצה שמחלקות הבסיס תהיינה Friend שחלק מפונקציות המחלקה יהיו חשופות למחלקה היורשת והנה ממציין הגישה Public, שאר חלקי הפונקציות ישארו פנימיות ולא יהיו נגישות דרך מרחב שונה, Public Protected זה כמובן לא קיים רק רציתי לתת דוגמה, התכוונתי שאני מקווה שהיה ביכולתנו לעשות דבר כזה בארכיטקטורה הבאה של נט.
 

MightyMonk

New member
בטח שיש תקרא ...

אתה מתכוון שאין ב- #C כי שם זה נקרא internal וב- VB.NET זה נקרא Friend. :)
 

Adrienne

New member
יש לי שאלה

האם אפשר להוריד את הסי שארפ לבד? בלי כל הסטודיו?
 

MightyMonk

New member
הסטודיו הנו סביבת הפיתוח בעוד ...

ש- #C הנה שפת התכנות בא אתה משתמש לשם כתבית היישומים בתוך סביבת הפיתוח, אממ אם אתה מתכוון ל- Net. Framework שהוא בעצם המנגנון שאחראי להפעלה של תוכנות העובדות בתקן CLR - Common Language Runtime בארכיטקטורת NET. ולכן כל תוכנה שנכתבה בסביבת NET. ויוצרת קוד מנוהל, כאשר קוד מנוהל זה אינו קוד טבעי אלא קוד ביניים, כאשר אין קונוטציה/תלות במעבד המבצע את ההוראות המפורשות, מי שמבצע אותם הוא ה- Framework, חייבים אנו ב- Framework כאשר הוא מספק כמה תכונות המאפשרות את קיום התקן והעבודה של תוכנות הנכתבות על פיו, והם: 1) השתלבות יישומים שנכתבו בשפות שונות וזה בגלל ממשק תכנות CLS 2) ניהול זכרון אוטומטי - Garbage Collector 3) טיפול בחריגים - Unified Unwinding 4) תמיכה במהדורת קוד - DLL Hell 5) מודל פשוט לאינטראקציה בין ריכיבים - Com Components 6) אבטחה משופרת (כולל סוגי נתונים מורשים) כדי ש- CLR תוכל לספק לנו את כל היתרונות האלו על המהדר להפיק מטא-נתונים (Matedata) לצד הקוד המנוהל, מטא-הנתונים הם נתונים שמתארים את סוגי-הנתונים ביישום ומאוחסנים בקובץ הפעלה נייד portable executable משותף. מי שאחראי לביצוע וטעינתם של התוכניות שנכתבו לסביבת CLR הנו VES - Virtual Executaion System.
 
למעלה