Inheritance F#继承自C#类+;访问受保护的字段

Inheritance F#继承自C#类+;访问受保护的字段,inheritance,f#,protected,Inheritance,F#,Protected,我有一个基类,它创建一个新的SQL Server连接,并在C#中执行一些实用方法,我想在F#中继承。目前,我无法从F#访问C#类中的受保护字段,尽管这在C#中是可行的 C#抽象类 公共抽象类SQL { 受保护的只读SqlConnectionStringBuilder bld; 受保护的只读SqlCommand cmd; 受保护的只读SqlConnection conn; 受保护的只读字符串; 受保护的字符串用户标识; 公共SQL(字符串服务器、字符串数据库) { bld=新的SqlConnect

我有一个基类,它创建一个新的SQL Server连接,并在C#中执行一些实用方法,我想在F#中继承。目前,我无法从F#访问C#类中的受保护字段,尽管这在C#中是可行的

C#抽象类

公共抽象类SQL
{
受保护的只读SqlConnectionStringBuilder bld;
受保护的只读SqlCommand cmd;
受保护的只读SqlConnection conn;
受保护的只读字符串;
受保护的字符串用户标识;
公共SQL(字符串服务器、字符串数据库)
{
bld=新的SqlConnectionStringBuilder();
bld.DataSource=server;
bld.InitialCatalog=db;
bld.IntegratedSecurity=true;
connstring=bld.ConnectionString;
conn=新的SqlConnection(connstring);
cmd=newsqlcommand();
GetUserID();
//这里还有其他实用方法
}
要继承的F#代码

type Transfer ( server : string ) ( db : string ) = 
inherit SQL(server, db)  
let accessAbstractConn = conn. //Can't access protected field????
我在这里遗漏了什么吗?我尝试过给基类字段别名,例如this.conn,它也不起作用

谢谢 Richard

参见相关问题:


基本上,我认为不能从
let
中执行此操作,因为它实际上位于隐式lambda的上下文中。

可以向构造函数添加自标识符:

type Transfer ( server : string, db : string ) as this = 
  inherit SQL(server, db)  
  let accessAbstractConn = this.conn
或者,使用
base
关键字:

type Transfer ( server : string, db : string ) = 
  inherit SQL(server, db)  
  let accessAbstractConn = base.conn

是的,看起来是这样,看看Daniel用别名调用该类的代码,确实可以访问包括继承成员在内的所有成员。但是我无法访问字段。那么如何更改连接字段的属性呢?@RichardTodd:我回答中的两种方法提供了对所有受保护成员(包括字段)的访问。