Extension les méthodes ne sont que des méthodes statiques, qui implémentent des "méthodes d'instance", en prenant un faux pointeur "this":
public static class Extensions
{
public static int ANewFakeInstanceMethod(this SomeObject instance, string someParam)
{
return 0;
}
}
Vous pouvez toujours l'invoquer comme une méthode statique - ce qui est la façon dont le compilateur compile votre code, de toute façon:
var inst = new SomeObject();
int result1 = inst.ANewFakeInstanceMethod("str");
int result2 = Extensions.ANewFakeInstanceMethod(inst, "str");
Si vous ne pouvez pas obtenir la syntaxe de méthode d'extension, vous pouvez toujours utiliser la 2ème syntaxe , même si vous arrachez la this
de votre définition de méthode statique:
var inst = new SomeObject();
int result2 = Extensions.ANewFakeInstanceMethod(inst, "str");
public static class Extensions
{
public static int ANewFakeInstanceMethod(SomeObject instance, string someParam)
{
return 0;
}
}
MAIS
la syntaxe et l'utilisation que vous essayez de mettre en œuvre ne pas de sens. Vous prenez un objet DateTime
existant instance (qui a ses propres valeurs pour la date et l'heure), et en essayant d'implémenter une nouvelle propriété/méthode hors de l'instance qui retournera une constante non apparentée.
Il suffit d'utiliser une classe statique, et définir les propriétés en lecture seule statique sur elle:
public static class KnownDates
{
public static DateTime StSpruffingsDay
{
get
{
return new DateTime(1, 2, 3, 4);
}
}
}
Si ce n'est pas une constante (comme, vous avez besoin pour l'année en cours), vous devez ajouter une méthode qui prend une année - ne pas essayer de le brouiller dans une méthode d'extension sur un DateTime
, car DateTime
incarne plus d'un an.
public static class KnownDates
{
public static DateTime GetTalkLikeAPirateDay(int year)
{
return new DateTime(// Todo: Calculate the value, based on Sept 19th
}
}
Si vous avez vraiment besoin de l'obtenir par rapport à un DateTime
, il fait toujours votre code plus clair pour passer à la méthode:
var fiveMinutesAgo = DateTime.Now.AddMinutes(-5);
// ...
var arrrr = KnownDates.GetTalkLikeAPirateDay(fiveMinutesAgo.Year);
... qu'il fait pour l'invoquer directement hors d'une instance DateTime
:
var fiveMinutesAgo = DateTime.Now.AddMinutes(-5);
// ...
var arrrr = fiveMinutesAgo.GetTalkLikeAPirateDay();