2010-04-23 66 views
2

我可以有一个扩展方法是这样的:您可以在类型的某个类型上使用扩展方法,而不使用类型的实例吗?

DateTime d = new DateTime(); 
d = d.GetRandomDate(); 

GetRandomDate是我的扩展方法。然而,上述没有多大意义。更好的是:

DateTime d = DateTime.GetRandomDate(); 

但是,我不知道该怎么做。一个扩展方法创建为:

public static DateTime GetRandomDate(this System.DateTime dt) 

将只在上面的第一个示例中添加GetRandomDate(),而不是第二个。有没有办法达到预期的行为?

+0

为什么你不在Random类上创建一个扩展方法(NextDate) – 2010-04-23 08:50:36

+0

我刚刚使用了一个随机日期作为例子,但在这种情况下这是有意义的。 – NibblyPig 2010-04-23 09:40:31

回答

2

你为什么要?如果你想调用一个静态方法,为什么不直接调用它?

好的,您需要使用类似DateTimeHelper.GetRandomDate()而不是DateTime.GetRandomDate()

+0

至于为什么,你不调用MyStringHelper.StripSpaces(myString)而不是使用像s =“a b c”这样的扩展方法的原因相同; s.StripSpaces(); - 方便 – NibblyPig 2010-04-23 08:43:32

+0

好的,但是你要剥离一个特定的字符串,而不是忽略实例并生成完全不同的东西。 – 2010-04-23 09:54:20

3

都能跟得上 - 不可能

你需要访问自己的静态类中的方法...

0

只是抛出这个,但你可以创建一个部分静态类的日期时间和抛出扩展方法?

+0

不,你不能这样做,因为现有的DateTime类也需要声明为部分。 – 2010-04-23 15:56:36

+0

不,我敢肯定,部分类是编译器功能,而不是CLR功能,所以即使DateTime是部分类也不行,因为你不能在一个程序集中包含类的一部分,而在另一个程序集中不能包含部分类。 – Qwertie 2010-04-23 16:10:36

+0

@Qwertie - 但是你不能把它放在System命名空间中吗? (当然,按下大绿色按钮时不会重新编译系统命名空间)@Steven - 你是对的 - 我只是在代码中自己试过,并不会飞。 – Perplexed 2010-04-23 16:10:46

相关问题