-
-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Extensions #471
Comments
昔ちょこっと書いたの: 要求1: 静的メンバーC# 3.0 の拡張メソッドはインスタンス メソッドでだけ「既存の型に追加したように見える書き方」ができます。 既存の型に静的メソッドを足せなくて困る例としては、ポリフィル(古い環境向けに最新機能を移植して使えるようにするような用途)とかでしょうか。 例えば割かし最近(.NET 8、2023年11月正式リリース)、 TimeProvider tp = TimeProvider.System; // 1秒待つ。 // TimeProvider を差し替えて、単体テストとかでは一瞬で終わるようにしたい。 await Task.Delay(TimeSpan.FromSeconds(1), tp);
#if NET8_0_OR_GREATER using System; using System.Runtime.CompilerServices; [assembly: TypeForwardedTo(typeof(TimeProvider))] #else namespace System; public class TimeProvider { // 互換実装 } #endif インスタンス メソッドの追加風のことも、拡張メソッドでできました。 using System.Runtime.CompilerServices; namespace System.Threading.Tasks; public static class TaskExtensions { // GetAwaiter メソッドがあると C# 5.0 の await が使える。 public static TaskAwaiter GetAwaiter(this Task task) { // 今はインスタンス メソッドで GetAwaiter があるけど、 // .NET Framework 4.0 以前はなかったので自作が必要。 return task.GetAwaiter(); } } ですが、先ほどの例に出てきた |
13から外れた。 |
https://ufcpp.net/blog/2024/3/extensions/
The text was updated successfully, but these errors were encountered: