עבור לתוכן

C# | לא יודע מראש מה פונקציה תחזיר

Featured Replies

פורסם

ועוד שאלה בסדרת המעבר מפייתון ל-C#:

אם אני לא יודע לומר מראש איזה סוג יוחזר ע"י פונקצייה מסויימת... מה מקובל לעשות? להחזיר object?

בדוגמה למשל אני לא יודע אם יחזור לי OracleConnection או MSSQLConnection כי זה תלוי בקלט מהמשתמש.


public string getOracleConnectionPath()
{
return "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="+this.Host+")(PORT="+this.Port+"))(CONNECT_DATA=(SERVICE_NAME="+this.ServiceName+"))); User Id="+this.UserName+";Password="+this.Password+";";
}

public OracleConnection makeOracleConnection()
{
return new OracleConnection(this.getOracleConnectionPath());
}

public object connect()
{
if (this.DBType == "Oracle")
return makeOracleConnection();
else if (this.DBType == "MSSQL")
return makeMSSQLConnection();
else
return makeOracleConnection();
}

נערך על-ידי TheAnthrax

פורסם

אתה מחזיר את המחלקה הכי ספציפית שעדיין מספיק גנרית לכל האפשרויות שלך.

במקרה הנ"ל סביר להניח שאפשר לעשות משהו יותר ספציפי מObject. סביר להניח שגם לMSSQLConnection וגם לOracleConnection יש מחלקת אב משותפת איפשהו שאינה Object.

פורסם
  • מחבר

כן מצאתי משהו משותף קרוב יותר..

ואם כבר אני שואל - מה לגבי dynamic? איך עובדים עם זה?

פורסם

אל תעבוד עם זה. מתכון לצרות. (אם אתה רוצה אני אפרט יותר כשאני אהיה ליד מחשב)

נערך על-ידי שניצל

  • 2 שבועות מאוחר יותר...
פורסם
כן מצאתי משהו משותף קרוב יותר..

ואם כבר אני שואל - מה לגבי dynamic? איך עובדים עם זה?

dynamic משתמש ב reflection ומקמפל תוך כדי ריצה - מה שגורם לכמה צרות:

1. אין לך תמיכה של intellisense, כי by definition אין לך מושג עם איזה אובייקט אתה עובד.

2. הפיענוח של הקוד מתבצע בזמן ריצה ובאמצעות reflection - דבר שהוא נורא איטי.

3. אם תקרא למתודה מסויימת באמצעות dynamic, ואז תעשה לך העמסה עם אותו מספר של פרמטרים, יש מצב יהיה שם בילבול בין ההעמסות ואתה תשב שעות בדיבאג.

ד"א - לגבי החזרה של טיפוס לא ידוע, למה לא להשתמש ב generics?

public static T ReturnUnknownType<T>(object param)

נערך על-ידי avrahams1

פורסם

במקרה הספציפי הזה אין סיבה אמיתית להשתמש ב-Generics. בסופו של דבר כשהוא עובד עם החיבור עצמו לא איכפת לו אם זה חיבור ל-MSSQL או ל-Oracle.

פורסם
במקרה הספציפי הזה אין סיבה אמיתית להשתמש ב-Generics. בסופו של דבר כשהוא עובד עם החיבור עצמו לא איכפת לו אם זה חיבור ל-MSSQL או ל-Oracle.

אם באמת יש מחלקת אב שמספקת את הפונקציונאליות אז צודק.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים