שאלות בסיסיות ב- c#

שאלות בסיסיות ב- c#

שלום חברים,
בעל כורחי נאלצתי במקום העבודה להתחיל לתכנת בסי שארפ. תמיד נמנעתי מהשפה הזאת בגלל שאני פשוט לא יכול לסבול את האתר של מייקרוסופט (רחוק שנות אור בנוחות של מהאתר של sun)
כרגע אני עושה יותר תוכניות פשוטות (כתיבה וקריאת מסמכים - בעיקר אקסל).
במהלך העבודה נתקלתי בכל מיני דברים שלכאורה אמורים להיות פשוטים אבל אני ניצב חסר אונים מולם, ואחרי ניסיון לשווא לקרוא ולקבל תשובות מה- msdn אני פונה ללב שלכם :)
מצטער מראש על החפירה, אבל אחרי שבוע שאני נלחם וסובל,וצובר אינספור שאלות שלא הצלחתי לתת להם מענה וקיבלתי רק מיגרנה מהם, מקווה שלא אכעיס אף אחד בשאלות שלי, וכל התייחסות יותר מתעזור לי ( ואולי מי יודע יש עוד כמה אנשים פה שהיו רוצים לדעת)
אשמח אם תתנו לי לפחות כיוון כלשהו במספר שאלות בסיסיות:
1. בנוגע ל- namespace האם נהוג ששם של dll יהיה דומה (או אפילו זהה) ל- namespace הכי "עמוק שלו". כלומר אם ה- dll מורכב מ- namepsace כזה:
XXX.YYY.ZZZ - האם נהוג לקרוא ל- dll בשם XXX.YYY.ZZZ כדי שיהיה יותר קל לדעת איזה namespace-ים ה- dll מכיל?
2. עוד משהו בנוגע ל - namespace , במידה ויש לי dll שיש בו namespace מורכב כמו : XXX.YYY.ZZZ, ברור לי שתחת namespace ZZZ אמורים להיות מחלקות, אך האם ייתכן שב- dll הנ"ל יהיה namespace YYY או XXX שבתוכו יהיו מחלקות או XXX.YYY.ZZZ מהווה סוג של נתיב וכל המחלקות, ממשקים וכו' חייבים להיות רק תחתו?
3.אחרון חביב לגבי namespace האם XXX.YYY.ZZZ התקבל מ - namespace-ים מקוננים או שזה סתם שם שהחליטו עליו? כלומר האם הקוד נראה ככה:
קוד:
namespace XXX
{
    namespace YYY
             {
                   namespace ZZZ
                   {
                     classes,interface,etc..
                   }
             }
 }
או פשוט ככה:
קוד:
namespace XXX.YYY.ZZZ
{
  classes,interface,etc..
}
4. נושא Add reference: האם כאשר מוסיפים dll-ים ( אם בכלל נכון להגדיר את זה ככה) ע"י התקנה מסודרת (לדוגמא התקנה של Office/SharePoint developement), האם מותקנים כל מיני דברים שנדרשים למכונה הוירטואלית? השאלה נובעת מזה שקראתי הרבה טוקבקים ברשת שאומרים שעד .net גירסא 4, אם רוצים להריץ במחשב כלשהו אפליקציה שמשתמשת ב- dll-ים של מייקרוסופט אופיס (במקרה שלי Microsoft.Office.Intero.Excel), אז צריך שעל המחשב שעליו תרוץ התוכנה יהיה מותקן גם office PIA. ואני שואל למה? הרי במקרה וקימפלתי את התוכנה וקיבלתי קובץ הרצה, האם זה לא מספיק כדי לרוץ על כל מחשב? בגלל זה שאלתי בתחילת הסעיף האם מותקנים כל מיני דברים נוספים שנדרשים למכונה הוירטואלית כחלק מהתקנת Office PIA? חשבתי שמדובר רק ב- dll- ים (כנראה שאני טועה).
5. בנוגע ל- dll - ים , ניסיתי להבין האם (PIA(Primary Interop Assembly קשור רק ל- office, מהראשי תיבות משתמע שלא, אבל כשאני מחפש בגוגל אני רואה ש- PIA תמיד מקושר ל- Office. מה זה בעצם Office PIA?
6. נושא add reference - ניסיתי להבין מהלינק https://docs.microsoft.com/en-us/vi...s-by-using-the-reference-manager?view=vs-2017
ויצאתי רק יותר מבולבל ממה שהתחלתי. ניסיתי להבין מה ההבדל בין Assemblies ל- COM? ומה ההבדל בין Framework ו - extnesions תחת Assemblies?

תודה מראש ובאמת מקווה שאף אחד לא יכעס.
 

nocgod

New member
כתבת הרבה, והרבה לא ברור

דווקא הדפי עזרה של MS הם ממש סבבה לדעתי, ביחס לדפים אחרים שיצא לי להשתמש בהם בעברי (php, go, java, ruby היו עוד כמה, מה זה משנה?).
בכל מקרה, לא חייב לדבוק ב MSDN בשביל לקבל מידע אל איך עובדים עם שיט שלהם.
1. לא חייב שהDLL יהיה זהה לשם של ה namespace, עובדתית הרבה DLLים שהשמות שלהם לא מכילים x.y.z.t, פחות נהוג לדאוג לזה בחברות שעושות SaaS כי למי אפכת איך קוראים ל DLL
2. הקלאסים לא בהכרח נמצאים בחלק הכי תחתון. משתמשים ב namespace כדי לאגד קלאסים בצורה שתהיה הגיונית לצוות שמפתח את התוכנה. אם זה אומר שצריך להיות class בתת-רמה כלשהי שהיא לא הכי תחתונה so be it
3. כמו שאמרתי קודם - namespace הוא כלי לסידור קוד, בינו לבין המבנה הפיזי על הכונן אין בהכרח קשר. למרות שלרוב דוחפים לכיוון שיהיה קשר בין מבנה הפרוייקט הפיזי לבין המבנה הלוגי, לדוגמא ויזואל סטודיו/ריידר יעשו על זה הערה. מניסיון אישי, סידור הגיוני של הקלאסים לרוב יהיה דומה לסידור הגיוני על הכונן.
4. לא ברור השאלה שלך, להתקין nuget בצורה מסודרת יכול להריץ script כחלק מתהליך ההתקנה - יכול להתקין מה בא לו. לרוב לא נוהגים לעשות התקנות ענק. Add referece של DLL ספציפי מוסיף רק את הDLL הספציפי לחבילה. לא שונה בכלום מהוספה של jar לצורך העיניין.
5. לא יודע, לא התעסקתי עם שיט של תלויות לאופיס
6. אסמבלי יחידת דפליומנט של קוד, אם באמת מעניין אותך פשוט תחפש .net Assembly בגוגל - ותקרא קצת. אז כדי להבין מה זה אסמבלי ל COM תקרא מה זה COM. לגבי החלק השני של השאלה - גוגל קצר מביא אותך ל SOF https://stackoverflow.com/questions/27707697/difference-between-assemblies-framework-and-extensions

בכללי מרגיש קצת שלא עשית יותר מידי מחקר עצמי, על .net יש לא מעט חומר באינטרנט בין אם זה באמצעות MSDN ובין אם זה ב SOF או בלוגים מקצועיים. לא מדובר באיזה שפה איזוטרית שאף אחד לא מכיר, #C כשפה והדוטנט כפריימוורק הם בין השפות/פריימוורקים הכי פופולריים נכון להיום, אז למצוא בהם מידע קל מאוד.
 
למעלה