继承c#类+访问保护字段



我有这个基类,它创建了一个新的SQL Server连接,并在c#中做了一些实用方法,我想在f#中继承。目前我不能从f#访问c#类中的受保护字段,尽管这在c#中可以工作。

c#抽象类
public abstract class SQL
{
    protected readonly SqlConnectionStringBuilder bld;
    protected readonly SqlCommand cmd;
    protected readonly SqlConnection conn;
    protected readonly string connstring;
    protected string userid;
    public SQL(string server, string db)
    {
        bld = new SqlConnectionStringBuilder();
        bld.DataSource = server;
        bld.InitialCatalog = db;
        bld.IntegratedSecurity = true;
        connstring = bld.ConnectionString;
        conn = new SqlConnection(connstring);
        cmd = new SqlCommand();
        GetUserID();
        //Other utility methods here
    }

f#代码继承

type Transfer ( server : string ) ( db : string ) = 
inherit SQL(server, db)  
let accessAbstractConn = conn. //Can't access protected field????

我错过了什么吗?我试过混淆基类字段,例如这个。Conn也不能工作。

谢谢理查德。

你可以给构造函数添加一个自我标识符:

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

参见相关问题:

  • f# -如何访问受保护的成员

  • 为什么f#中没有一个受保护的访问修饰符?

基本上我认为你不能在let中这样做因为它实际上是在隐式的上下文中

最新更新