Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#受保护方法的公共重写_F# - Fatal编程技术网

F#受保护方法的公共重写

F#受保护方法的公共重写,f#,F#,我刚刚开始学习F#,我正在将其与Monogame结合使用,创建一个简单的游戏,帮助自己学习该语言的各种功能。我在尝试从外部访问我的游戏类时遇到了一个障碍,因为Monogame游戏类将方法定义为受保护的。尝试对该方法进行公共重写会抛出一个错误,告诉我不允许设置可访问性修饰符 在C#中定义的基类 F#中的公共覆盖 Q:对继承的受保护C方法进行公共F#重写的正确方法是什么? 无论在F#还是C#中,都不允许更改覆盖的可访问性。基于@Endjru,最好的方法是使用公共包装器方法来调用受保护的方法 t

我刚刚开始学习F#,我正在将其与Monogame结合使用,创建一个简单的游戏,帮助自己学习该语言的各种功能。我在尝试从外部访问我的游戏类时遇到了一个障碍,因为Monogame游戏类将方法定义为受保护的。尝试对该方法进行公共重写会抛出一个错误,告诉我不允许设置可访问性修饰符


在C#中定义的基类


F#中的公共覆盖


Q:对继承的受保护C方法进行公共F#重写的正确方法是什么?


无论在F#还是C#中,都不允许更改覆盖的可访问性。基于@Endjru,最好的方法是使用公共包装器方法来调用受保护的方法

type Game as game = 
    inherit Base()

    override game.Method = 
        //...
        ()

    member game.PublicMethod = game.Method

我认为你在C#中也做不到这一点;至少,当我尝试用C#和
Base
Game
类来实现这一点时,它没有编译,并给出了这样的错误消息:“当重写“受保护的”继承成员时无法更改访问修饰符”,只需在Game类中创建另一个方法,该方法将是公共的,并将调用受保护的方法,也就是说,
member game.PubMethod()=base.Method()
@MarkSeemann:你是对的。Visual Studio IDE for C#不会像对F#那样用红色的歪歪扭扭警告用户,直到在尝试编译之后才这样做。@Endrju:谢谢,这很可能是我最后要做的。顺便说一句:
键入game as game
中的自标识符
game
几乎是不需要的,并且可以作为可能的气味的指示器(这里肯定不需要)
type Game as game = 
    inherit Base()

    //Error: Accessibility modifiers are not permitted on overrides or interface implementations
    override public game.Method = 
        //...
        ()
type Game as game = 
    inherit Base()

    override game.Method = 
        //...
        ()

    member game.PublicMethod = game.Method