F # Наследование от класса C # + защищенные поля доступа

У меня есть этот базовый класс, который создает новое соединение с SQL Server и выполняет некоторые служебные методы на C #, я хочу унаследовать его от F #. В настоящее время я не могу получить доступ к защищенным полям в классе C # из F #, хотя это будет работать в 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, который тоже не работает.

Спасибо Ричард


person Richard Todd    schedule 26.02.2013    source источник


Ответы (2)


Вы можете добавить в конструктор самоидентификатор:

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
person Daniel    schedule 26.02.2013

См. Связанные вопросы:

В основном я думаю, что вы не можете сделать это из let, потому что на самом деле это в контексте неявной лямбды.

person sinelaw    schedule 26.02.2013
comment
Да, похоже, это так, глядя на код Дэниела, вызывающий класс с псевдонимом, действительно дает доступ ко всем членам, включая унаследованные. Однако я не могу получить доступ к полям. Итак, как я могу изменить свойства, скажем, поля подключения? - person Richard Todd; 26.02.2013
comment
@RichardTodd: два подхода в моем ответе обеспечивают доступ ко всем защищенным членам, включая поля. - person Daniel; 26.02.2013