Extension методы - это просто статические методы, которые реализуют «методы экземпляра», используя поддельный «этот» указатель:
public static class Extensions
{
public static int ANewFakeInstanceMethod(this SomeObject instance, string someParam)
{
return 0;
}
}
Вы можете вызвать его так же, как статический метод - это как компилятор компилирует код, так или иначе:
var inst = new SomeObject();
int result1 = inst.ANewFakeInstanceMethod("str");
int result2 = Extensions.ANewFakeInstanceMethod(inst, "str");
Если вы не можете получить синтаксис метода расширения, вы можете использовать 2-й синтаксис , даже если вы раздеть this
от вашего статического определения метода:
var inst = new SomeObject();
int result2 = Extensions.ANewFakeInstanceMethod(inst, "str");
public static class Extensions
{
public static int ANewFakeInstanceMethod(SomeObject instance, string someParam)
{
return 0;
}
}
НО
синтаксис и использование вы пытаетесь реализовать делает не имеет смысла. Вы принимаете существующий объект DateTime
экземпляр (который имеет свои значения для даты и времени) и пытается реализовать новое свойство/метод с экземпляром, который вернет некоторую несвязанную константу.
Просто используйте статический класс, и определить статические свойства только для чтения на нем:
public static class KnownDates
{
public static DateTime StSpruffingsDay
{
get
{
return new DateTime(1, 2, 3, 4);
}
}
}
Если это не является постоянной величиной (как, вам это нужно на текущий год), вы должны добавить метод, который занимает год - не пытайтесь застревать его в методе расширения поверх DateTime
, потому что DateTime
воплощает более года.
public static class KnownDates
{
public static DateTime GetTalkLikeAPirateDay(int year)
{
return new DateTime(// Todo: Calculate the value, based on Sept 19th
}
}
Если вам действительно нужно, чтобы получить его по отношению к DateTime
, он по-прежнему делает ваш код более понятным передать его методу:
var fiveMinutesAgo = DateTime.Now.AddMinutes(-5);
// ...
var arrrr = KnownDates.GetTalkLikeAPirateDay(fiveMinutesAgo.Year);
... Чем это делает, чтобы вызвать его прямо off a DateTime
пример:
var fiveMinutesAgo = DateTime.Now.AddMinutes(-5);
// ...
var arrrr = fiveMinutesAgo.GetTalkLikeAPirateDay();