Covarsky 1.4.2
dotnet add package Covarsky --version 1.4.2
NuGet\Install-Package Covarsky -Version 1.4.2
此命令旨在在Visual Studio的包管理器控制台中使用,因为它使用NuGet模块的Install-Package版本。
<PackageReference Include="Covarsky" Version="1.4.2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
对于支持PackageReference的项目,将此XML节点复制到项目文件中以引用包。
paket add Covarsky --version 1.4.2
NuGet团队不支持此客户端。请联系其维护者以获得支持。
#r "nuget: Covarsky, 1.4.2"
#r指令可用于F#交互式和Polyglot Notebooks。将其复制到交互式工具或脚本源代码中,以引用该包。
// Install Covarsky as a Cake Addin #addin nuget:?package=Covarsky&version=1.4.2 // Install Covarsky as a Cake Tool #tool nuget:?package=Covarsky&version=1.4.2
NuGet团队不支持此客户端。请联系其维护者以获得支持。
Covarsky
Covarsky是一个工具,将协变类型引入F#或任何其他本不支持协变类型的.NET语言。由Sigourney驱动,它运行一个MSBuild任务,在编译后修改程序集。
如何使用
将
Covarsky
NuGet包添加到您的项目中。创建一个新的源文件,包含两个(如果您只需要一种类型的协变,则为一)属性,如下(F#示例)
namespace global
open System
[<AttributeUsage(AttributeTargets.GenericParameter)>]
type internal CovariantOutAttribute() =
inherit Attribute()
[<AttributeUsage(AttributeTargets.GenericParameter)>]
type internal ContravariantInAttribute() =
inherit Attribute()
警告:属性必须在全局命名空间中声明,直接从
Attribute
类继承,并且是内部的。
- 准备好了!让我们看看一个例子。
type MyType<[<CovariantOut>] 'T> =
abstract GetObject: unit -> 'T
// [...]
let cast (x: MyType<string>): MyType<obj> =
unbox x
如您所见,我们必须使用unbox
执行手动类型转换,因为F#不识别MyType
的'T
是协变的。
自定义Covarsky
使用自定义属性名称
如果您想要自定义Covarsky能够识别的属性名称,您可以通过指定它来做到这一点(在项目文件中)
<PropertyGroup>
<CustomInAttributeName>MyLibrary.MakeItContravariantPleaseAttribute</CustomInAttributeName>
<CustomOutAttributeName>MyLibrary.MakeItCovariantPleaseAttribute</CustomOutAttributeName>
</PropertyGroup>
如您所见,接受完全限定名。然而,属性类仍然是内部的,并且属于相同的程序集。
禁用Covarsky
从版本1.3.0开始,Covarsky在安装包时默认启用。如果出于任何原因您想禁用它,可以使用以下属性
<PropertyGroup>
<CovarskyEnable>false</CovarskyEnable>
</PropertyGroup>
注意事项
在Covarsky执行后,这两个属性不会被删除。从版本1.4.0开始,属性将可以从泛型参数中删除,以便通过IL链接器进行精简。用户代码不应该依赖于它们的存在。如果这两个属性不在接口或委托的泛型参数中,它们将被忽略。
在已经 cov(ntra)变元的泛型参数中使用这两个属性将引发警告,但也会被忽略。
在同一个泛型参数上同时使用这两个属性将引发错误并导致构建失败(除非上面已经发生某些事情)。
以任何其他错误的方式使用这些属性(例如,具有返回泛型类型的方法的逆变接口)将不会被Covarsky检查,并可能导致您的程序集损坏。
文档
维护者
-
.NETStandard 2.0
- Sigourney.Build >= 0.4.1
NuGet 包
此包未被任何NuGet包使用。
GitHub 代码库
此包未被任何流行的GitHub代码库使用。
Covarsky 已更新为使用 Sigourney 0.4.1。没有用户可见的更改。