循环引用和构造函数

我试图建立一个属性来验证类型的某个实例。

为此,我必须将强制ObjectInstance转换为该类型。

我需要在该类型的成员上设置属性。

因此,我们需要and在循环定义中使用关键字。

但是在以下情况下,我得到的错误是

自定义属性必须调用对象构造函数

在下面标记的行上。

namespace Test

open System
open System.ComponentModel.DataAnnotations

[<AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)>]
type MyAttribute() =
    class
    inherit ValidationAttribute ()

    override this.IsValid (value: Object, validationContext: ValidationContext) =
        match validationContext.ObjectInstance with
        | :? MyClass as item ->
            // TODO more validation
            ValidationResult.Success
        | _ ->
            new ValidationResult("No no no")
    end
and MyClass(someValue) =
    [<Required>]
    [<Range(1, 7)>]
  //vvvvvvvvvvvvvvv
    [<MyAttribute>]
  //^^^^^^^^^^^^^^^
    member this.SomeValue : int = someValue

我尝试手动调用构造函数,例如:

[<MyAttribute()>]
// or
[<new MyAttribute()>]

但是它们都不被系统接受。

F#专家可以在这里帮助我吗?

阿诺债务

一种解决方案是首先在签名文件中描述您的类型。

由于该属性是在签名文件中指定的,因此您无需在实现文件中再次添加该属性:

Foo.fsi:

namespace Foo

open System

[<AttributeUsage(AttributeTargets.Property)>]
type MyAttribute =
    inherit System.Attribute

    new : unit -> MyAttribute

    member Foo : unit -> MyClass

and MyClass =
    new : someValue : int -> MyClass

    [<MyAttribute()>]
    member SomeValue : int

Foo.fs:

namespace Foo

open System

[<AttributeUsage(AttributeTargets.Property)>]
type MyAttribute() =
    inherit Attribute()

    member this.Foo () =
        new MyClass(1)

and MyClass(someValue) =
    // [<MyAttribute()>] -> specified in the fsi, still appears in compiled code
    member this.SomeValue : int = someValue

请参阅https://msdn.microsoft.com/en-us/library/dd233196.aspx以获取参考

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用std :: weak_ptr和别名构造函数破坏循环引用:声音还是有问题?

来自分类Dev

默认移动构造函数和引用成员

来自分类Dev

构造函数中的C ++封装和引用

来自分类Dev

对构造函数和析构函数的未定义引用

来自分类Dev

对构造函数和析构函数的未定义引用

来自分类Dev

复制或引用构造函数?

来自分类Dev

取消引用新名称时移动语义和构造函数

来自分类Dev

C ++:右值引用构造函数和复制删除

来自分类Dev

循环构造函数约束

来自分类Dev

AS3:嵌套函数+自引用VS构造函数级函数和变量

来自分类Dev

避免在构造函数中const引用和rvalue引用呈指数增长

来自分类Dev

什么是引用复制构造函数?

来自分类Dev

C#构造函数引用

来自分类Dev

在构造函数中设置引用?

来自分类Dev

复制具有相互引用/循环依赖关系的类的构造函数

来自分类Dev

未定义对vTable的构造函数和析构函数引用

来自分类Dev

什么是循环引用和循环?

来自分类Dev

构造函数和转换

来自分类Dev

构造函数和无参数构造函数?

来自分类Dev

通过引用从函数调用的C ++构造函数

来自分类Dev

Python函数式编程对构造函数的引用

来自分类Dev

通过引用从函数调用的C ++构造函数

来自分类Dev

如何构造for和if循环以构造拉丁方?

来自分类Dev

构造函数和返回值优化(rvo)中的C ++通用引用

来自分类Dev

为什么在此类中复制构造函数,operator =和引用具有编译问题

来自分类Dev

如何在dartdoc中引用构造函数和运算符?

来自分类Dev

C#9.0记录-不可为空的引用类型和构造函数

来自分类Dev

为什么在此类中复制构造函数,operator =和引用具有编译问题

来自分类Dev

如果C ++类同时包含const引用和非const引用副本构造函数,该怎么办?

Related 相关文章

  1. 1

    使用std :: weak_ptr和别名构造函数破坏循环引用:声音还是有问题?

  2. 2

    默认移动构造函数和引用成员

  3. 3

    构造函数中的C ++封装和引用

  4. 4

    对构造函数和析构函数的未定义引用

  5. 5

    对构造函数和析构函数的未定义引用

  6. 6

    复制或引用构造函数?

  7. 7

    取消引用新名称时移动语义和构造函数

  8. 8

    C ++:右值引用构造函数和复制删除

  9. 9

    循环构造函数约束

  10. 10

    AS3:嵌套函数+自引用VS构造函数级函数和变量

  11. 11

    避免在构造函数中const引用和rvalue引用呈指数增长

  12. 12

    什么是引用复制构造函数?

  13. 13

    C#构造函数引用

  14. 14

    在构造函数中设置引用?

  15. 15

    复制具有相互引用/循环依赖关系的类的构造函数

  16. 16

    未定义对vTable的构造函数和析构函数引用

  17. 17

    什么是循环引用和循环?

  18. 18

    构造函数和转换

  19. 19

    构造函数和无参数构造函数?

  20. 20

    通过引用从函数调用的C ++构造函数

  21. 21

    Python函数式编程对构造函数的引用

  22. 22

    通过引用从函数调用的C ++构造函数

  23. 23

    如何构造for和if循环以构造拉丁方?

  24. 24

    构造函数和返回值优化(rvo)中的C ++通用引用

  25. 25

    为什么在此类中复制构造函数,operator =和引用具有编译问题

  26. 26

    如何在dartdoc中引用构造函数和运算符?

  27. 27

    C#9.0记录-不可为空的引用类型和构造函数

  28. 28

    为什么在此类中复制构造函数,operator =和引用具有编译问题

  29. 29

    如果C ++类同时包含const引用和非const引用副本构造函数,该怎么办?

热门标签

归档