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