从C#类+接入保护领域F#继承(F# Inherit from C# class + access

2019-08-17 04:46发布

我有一个创建一个新的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也不起作用。

感谢理查德

Answer 1:

您可以自标识添加到构造:

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


Answer 2:

请参阅相关的问题:

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

  • 为什么没有在F#受保护的访问修饰符?

基本上,我认为你不能从内做到这一点let ,因为它实际上是在一个隐含的拉姆达的情况下。



文章来源: F# Inherit from C# class + access protected fields