Quando si crea un componente di Windows Runtime, il componente può essere utilizzato da lingue non gestite, come Javascript o C++. Chiaramente quelle lingue non hanno idea di come generare un System.DateTime adeguato, è un tipo .NET specifico.
Tali componenti devono pertanto utilizzare solo tipi di WinRT nativi e in caso contrario osservare le restrizioni presenti in WinRT. Una restrizione di questo tipo che ti imbatterai dall'inizio è che WinRT non supporta l'ereditarietà dell'implementazione. Il che richiede la dichiarazione della classe sigillata.
I tipi di WinRT nativi sono molto diversi dai tipi .NET. Il vero tipo di runtime che può memorizzare una data è Windows.Foundation.DateTime. Una stringa è in realtà una maniglia HSTRING. Un elenco è in realtà un IVector. Eccetera.
Inutile dire che se si dovessero effettivamente utilizzare quei tipi nativi, il programma non sarebbe più simile a un programma .NET. E non è così, la versione .NET 4.5 di CLR ha un di proiezione di lingua integrato. Codice che traduce automaticamente i tipi WinRT nei loro tipi .NET equivalenti. Quella traduzione ha alcuni spigoli, alcuni tipi non possono essere facilmente sostituiti. Ma la stragrande maggioranza di loro mappa senza problemi.
System.DateTime è uno di questi spigoli. La proiezione della lingua di Windows.Foundation.DateTime è System.DateTimeOffset. Quindi è sufficiente a risolvere il problema, dichiarando il tuo metodo come questo:
public DateTimeOffset Calculate(DateTimeOffset dateTime) {
// etc..
}
L'unico altro punto degno di nota è che questo è necessaria solo per i membri che altro codice potrebbe utilizzare. Membri pubblici
fonte
2012-12-08 16:00:44
Cosa succede se lo si cambia da pubblico a interno? –