以下示例來自本書中的C#編程中的密鑰#。靜態方法和實例方法C#
該程序的第一次迭代是典型的C方式來做到這一點,下一個輪迴更面向對象。該計劃是計算某一事件發生在一年中哪一天的一個簡單示例(如果是閏年,則12月31日是365或366)。
using System;
class StructureAndMethodsTwo
{
static void Main()
{
Date dateMoonWalk = new Date();
dateMoonWalk.iYear = 1969;
dateMoonWalk.iMonth = 7;
dateMoonWalk.iDay = 20;
Console.WriteLine("Moon walk: {0}/{1}/{2} Day of Year: {3}",
dateMoonWalk.iMonth, dateMoonWalk.iDay, dateMoonWalk.iYear,
Date.DayOfYear(dateMoonWalk));
}
}
struct Date
{
public int iYear;
public int iMonth;
public int iDay;
public static bool IsLeapYear(int iYear)
{
return iYear % 4 == 0 && (iYear % 100 != 0 || iYear % 400 == 0);
}
static int[] aiCumulativeDays = { 0, 31, 59, 90, 120, 151,
181, 212, 243, 273, 304, 334 };
public static int DayOfYear(Date dateParam)
{
return aiCumulativeDays[dateParam.iMonth - 1] + dateParam.iDay +
(dateParam.iMonth > 2 && IsLeapYear(dateParam.iYear) ? 1 : 0);
}
}
程序的下一個版本就是除了DayOfYear
方法,它變成
public int DayOfYear()
{
return aiCumulativeDays[iMonth -1] + iDay+ (iMonth > 2 && IsLeapYear(iYear) ? 1:0);
}
什麼也正是在第二版,可以讓更多的面向對象比第一友好的事情一樣? Date
類型的對象是在第一次迭代中由方法DayOfYear
創建的嗎?我知道該方法的實例版本可以直接訪問結構的字段,但我不知道它的明顯優勢。
你能解釋一下(如果它在合理理解的範圍內)當第一個例子中的方法使用Date對象的另一個副本時發生了什麼?這是否涉及使用更多的內存,性能問題或更可能兩者? – wootscootinboogie
@wootscootinboogie編輯我的答案澄清。希望這有助於 –
謝謝。我已經在學習c#大約兩個星期了,而不是像過去那樣讓內部工作順利進行,並儘可能快地開始工作,我試圖做正確的事情,並得到我所有的鴨子在我之前連續。謝謝 :) – wootscootinboogie