F#类库继承C#基类编译报错,寻求修复方案
F#类编译错误及修复方案
问题背景
将控制台应用中的C#类转换为F#类时,借助Copilot生成的代码无法编译。基于.NET 7.0 SDK(v7.0.201)创建测试解决方案后,C#编译器报出以下错误:
- Program.cs(7,14): [CS0712] 无法创建静态类“Class2”的实例
- Program.cs(7,1): [CS0723] 无法声明静态类型“Class2”的变量
- Program.cs(8,29): [CS1061] “Class2”不包含“Greeting”的定义,也找不到可访问的扩展方法
- Program.cs(8,49): [CS1061] “Class2”不包含“Number”的定义,也找不到可访问的扩展方法
错误原因
F#代码中使用module Class2包裹了type Class2()类型定义,这会让C#将Class2识别为静态模块而非可实例化的类,因此无法创建实例,也无法访问类的成员方法和属性。
修复方案
移除包裹Class2类型的module Class2代码块,让Class2类型直接处于LibraryF命名空间下即可。
修改后的F#类代码
namespace LibraryF open LibraryC type Class2() = inherit Class1() member this.Junk() = "not static" override this.Number = 42 override this.Greeting() = let fromBase = base.Greeting() $"{fromBase} from Class2 {this.Number}"
修改后重新编译运行,即可正常实例化Class2并调用其Greeting方法和Number属性,与C#端代码兼容。
注:手动编写的解决方案导出脚本已在GitHub提交Issue,提议添加
dotnet命令将.sln文件导出为dotnet命令序列的功能。
内容的提问来源于stack exchange,提问作者silvalli
相关产品推荐
相关产品推荐

