F#从C#class继承并访问受保护的字段

时间:2013-02-26 14:22:48

标签: inheritance f# protected

我有这个基类创建一个新的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????

我错过了什么吗?我试过别名基类字段,例如this.conn也不起作用。

由于 理查德

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

参见相关问题:

基本上我认为你不能在let内做到这一点,因为它实际上是在一个隐含的lambda的上下文中。