שאלות יחסית בסיסיות בסי שארפ

שאלות יחסית בסיסיות בסי שארפ

היי חברים,

היני בוגר תואר בהנדסת תוכנה. בתואר התעסקתי רק עם ג'אווה (במסגרת שפות מונחות עצמים).
בג'אווה היה כל כך כיף. הכל ברור ואילו בסי שארפ פשוט הלכתי לאבדון.
אודה לכם אם תנסו לענות לי על מספר שאלות שאולי יעזרו לי (חשוב לי לציין שלפני שכתבתי פה את השאלה קראתי הרבה גוגל ובאתר של מייקרוסופט ועדיין נשארתי חסר אונים):
1. בג'אווה יש שני סוגי משתנים: א.פרימיטיב, ב.רפרנס (נראה לי שאפשר לקרוא לו משתנה יחס). הכל כל כך פשוט, כל מה שהוא לא אובייקט נחשב משתנה פרימיטיבי וכל משתנה אחרי הינו רפרנס.
בסי שארפ משתמשים בכמה סוגי מונחים שאני פשוט לא מבין: value types,reference typs,primitive types. לא מצליח להבין מה המשמעות שלהם!!

2.המושג by reference, by value לא קיים בג'אווה כי בהגדרה כל המשתנים בג'אווה מועברים ע"י value.
רציתי להבין בסי שארפ, יש קשר בין by reference לבין reference type (המשתנה שאוזכר בסעיף א')

3.אחת ולתמיד, בסי שארפ יש טיפוסים פרימיטייבים או שאין? פשוט השתגעתי כבר!

4. בג'אווה כל מה שבתוך הפוקנציה (משתנים פרימיטיבים ורפרנסים לאובייקטים) מוקצה על המחסנית וכל האובייקטים מוקצים על הערימה.
מה מוקצה על המחסנית ומה מוקצה על הערימה בסי שארפ?

מצטער על השאלות הרבות, פשוט התייאשתי ואני סנטימטר מלזנוח את השפה הזאת (ואני לא רגיל לוותר על דברים שקשה לי. פשוט אני משתגע)
 

bismark1

New member
זה מאוד דומה לג'אווה

(אגב, מהשאלות נראה שאין לך שום רקע בשפות שהן יותר "low level" - לא למדת C בתואר?)

אני קצת מפשט ואולי לא מדייק בחלק מההסברים אבל בגדול -
1. יש שני סוגים של טיפוסים:
reference types - אובייקט שנוצר על ה-heap ואתה מקבל מצביע (רפרנס) אליו, כמו בג'אווה. Class ב-#C הוא דוגמא לreference type.
value types - נוצר על ה-stack, ההתייחסות אליו היא כעותק יחיד שיש לך גישה למידע שלו ישירות. Struct ב-#C הוא value type.
סוג נוסף של value type הם טיפוסים פרימיטיביים, בדיוק כמו בג'אוה. אם אתה מחפש את ההקבלה בין השפות אתה יכול להגיד שבעוד שבג'אווה רק הטיפוסים הפרימיטיביים הם value type, ב-#C יש בנוסף עוד אובייקטים כאלו.

2. גם ב-#C המשתנים מועברים by value, מה שצריך להבין הוא מה ההבדל בין העברה כזו שמבוצעת על reference type לבין העברה כזו שמבוצעת על value type:
עבור reference type, בדיוק כמו בג'אווה מה שמועתק הוא המצביע לאובייקט, לכן אפשר לבצע בתוך פונקציה מניפולציה על אובייקט שהוגדר בחוץ.
עבור value type - כמו טיפוסים פרימיטיביים בג'אווה, מה שמועבר הוא עותק של האובייקט עצמו ולכן כל פעולה שתבוצע בתוך הפונקציה על משתנה כזה מבוצעת על עותק של האובייקט שהוגדר בחוץ ולא תשפיע מחוץ לסקופ של הפונקציה.

בנוסף, #C מאפשרת להעביר אובייקטים by reference ולא by value במידה ואתה רוצה ע"י שימוש במילים השמורות ref ו-out. זה ההבדל העיקרי מג'אווה.

3. יש

4. אם אתה מדבר על פרמטרים לפונקציה - מה שמועבר לפונקציה מועבר by value על המחסנית. כמו בג'אווה.
בנוסף, החלוקה למחסנית וערימה היא קצת מלאכותית ולא מאוד חשובה, צריך פשוט להבין את ההתנהגות.
 

selalerer

New member
#C זה Java עם תוספות.

כל מה שאתה יודע על Java נכון גם ל-#C אלא אם משתמשים ב-key words מיוחדים בכדי לשנות את ההתנהגות הזו.
&nbsp
ה-key words (שאני זוכר כרגע) שמשנים את ההתנהגות הם:
- ref
- out
- struct
&nbsp
&nbsp
 
למעלה