مطلب زير چكيدهاي است از كتاب Framework Design Guidelines در مورد سربارگذاري توابع
الف) از يك نوع خروجي استفاده كنيد
مثال زير را در نظر بگيريد:
public User[] GetGroupMembers(int groupId)
public List<User> GetGroupMembers(string groupName)
مشكل اينجا است كه هنگام فراخواني هر كدام، نحوهي استفاده متفاوت خواهد بود. بنابراين بايد از اين نوع سربارگذاري پرهيز كرد.
ب) نامهاي آرگومانهاي توابع سربارگذاري شده شما بايد يكسان باشند
در مثال زير، از اولين آرگومان جهت دريافت شناسهي يك گروه استفاده ميشود:
public List<User> GetGroupMembers(int groupId)
public List<User> GetGroupMembers(int id, int pageIndex, int pageSize)
ج) ترتيب آرگومانها را در توابع سربارگذاري شده حفظ و رعايت نمائيد
لطفا به مثال زير دقت كنيد:
public List<User> GetGroupMembers(int groupId)
public List<User> GetGroupMembers(int pageIndex, int pageSize, int groupId)
د) از call forwarding استفاده كنيد
جهت توضيح بهتر call forwarding به مثال زير دقت نمائيد:
public List<User> GetGroupMembers(int groupId)
{
return GetGroupMembers(groupId, 0, 10);
}
public List<User> GetGroupMembers(int groupId, int pageIndex, int pageSize)
{
return GetGroupMembers(groupId, pageIndex, pageSize, SortOrder.Ascending);
}
public List<User> GetGroupMembers(int groupId, int pageIndex, int pageSize, SortOrder sortOrder)
{
var query = new GroupQuery();
query.GroupID = groupId;
query.PageIndex = pageIndex;
query.PageSize = pageSize;
query.SortOrder = sortOrder;
return GetGroupMembers(query);
}
public List<User> GetGroupMembers(GroupQuery groupQuery)
{
// Actual implementation to get group members goes here
}
ه) زياده روي نكنيد!
آخرين موردي كه توصيه شده اين است كه در تهيه توابع سربارگذاري شده زياده روي نكنيد. در اين نوع موارد بايد قانون 80/20 را در نظر گرفت. 2 تا 3 تابع سربارگذاري شده ارائه دهيد كه 80 درصد كار را انجام ميدهند و سپس يك تابع سربارگذاري شدهي ديگر ارائه دهيد كه 20 درصد باقيمانده را پوشش دهد.
پ.ن.
در سي شارپ 4 ، با معرفي optional parameters ، شايد كمتر به سربارگذاري نياز باشد.