namespace Analogy { /// /// This example shows that a library that needs access to target .NET Standard 1.3 /// can only access APIs available in that .NET Standard. Even though similar the APIs exist on .NET /// Framework 4.5, it implements a version of .NET Standard that isn't compatible with the library. /// INetCoreApp10 class Example1 { public void Net45Application(INetFramework45 platform) { // .NET Framework 4.5 has access to all .NET Framework APIs platform.FileSystem(); platform.Console(); // This fails because .NET Framework 4.5 does not implement .NET Standard 1.3 // Argument 1: cannot convert from 'Analogy.INetFramework45' to 'Analogy.INetStandard13' NetStandardLibrary13(platform); } public void NetStandardLibrary13(INetStandard13 platform) { platform.FileSystem(); platform.Console(); } } /// /// This example shows a library targeting multiple frameworks and 2 different applications /// using that library. MultipleTargetsLibrary needs access to the FileSystem, that API was only available /// in .NET Standard 1.3. .NET Standard 1.3 only works with .NET Framework 4.6. Because of this /// MultipleTargetsLibrary needs to add support for .NET Framework 4.5 explicitly. /// class Example2 { public void Net45Application(INetFramework451 platform) { // On the .NET 4.5.1 application, the INetFramework45 implementation is choson MultipleTargetsLibrary(platform); } public void NetCoreApplication(INetCoreApp10 platform) { // On the .NET Core 1.0 application, the INetStandard13 implementation is choson MultipleTargetsLibrary(platform); } public void MultipleTargetsLibrary(INetFramework45 platform) { platform.FileSystem(); } public void MultipleTargetsLibrary(INetStandard13 platform) { platform.FileSystem(); } } /// /// This example shows how future platforms can be added without the need to change libraries that /// target the .NET Standard. JSON.NET targets .NET Standard 1.0 and can run on *ANY* platform that implements /// the standard. /// class Example3 { /// /// This future platform implements .NET Standard 1.3 /// public void FuturePlatformApplication(ISomeFuturePlatform platform) { // You are able to use JSON.NET with the future platform without recompiling JSON.NET JsonNet(platform); } /// /// This method represents the implementation of JSON.NET. JSON.NET supports .NET Standard 1.0. /// public void JsonNet(INetStandard10 platform) { platform.Linq(); platform.Reflection(); platform.Collections(); } } }