【发布时间】:2014-06-23 18:44:16
【问题描述】:
我正在编写一个 C# 小程序来抓取一个目录并给我一个文件列表,这些文件在最后 CSV 行中的日期小于当前日期。由于这是一个小程序,我并没有花太多时间使代码非常干净或任何东西——但我想这都是见仁见智的问题。
奇怪的是下面这组代码sn-ps。三个静态方法都在同一个类中。
public static DateTime dateStringConverter(string mmddyyyy, char delim='/')
{
string[] date = mmddyyyy.Split(delim);
DateTime fileTime = new DateTime(Convert.ToInt32(date[2]), Convert.ToInt32(date[0]), Convert.ToInt32(date[1]));
return fileTime;
}
public static string dateStringGetter()
{
string sYear = DateTime.Now.Year.ToString();
string sMonth = DateTime.Now.Month.ToString().PadLeft(2, '0');
string sDay = DateTime.Now.Day.ToString().PadLeft(2, '0');
return sMonth + '/' + sDay + '/' + sYear;
}
public static DateTime dateStringGetter()
{
string datestring = dateStringGetter();
return dateStringConverter(datestring);
}
错误信息说:
Error 1 Type 'Poller.Program' already defines a member called
'dateStringGetter' with the same parameter types
问题方法是 dateStringGetter() 的第二个重载副本,它当然与第二个版本具有相同的参数类型(无),但具有两个完全不同的返回类型。一个是 DateTime,另一个是字符串。具有 DateTime 返回类型的版本——在一个错误编码的字符串中——调用具有字符串类型的 dateStringGetter() 版本。
这不是很好奇吗? C# 不会仅基于返回类型重载方法吗?我想我已经完成了库的重载,这些库将根据调用自动检测我想要的返回类型——但我不确定。对此感觉有些不对劲。
所以我想 C# 不会重载返回类型?
【问题讨论】:
-
简单 - 你不能有两种方法,只是返回类型不同。使用不同的名称。
标签: c# overloading