4

新しい 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 などの基本クラス フィールドのエイリアスを試みましたが、これも機能しません。

ありがとうリチャード

4

2 に答える 2

11

コンストラクターに自己識別子を追加できます。

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
于 2013-02-26T14:52:38.263 に答える
2

関連する質問を参照してください:

let基本的に、実際には暗黙のラムダのコンテキストにあるため、 a 内からは実行できないと思います。

于 2013-02-26T14:27:50.663 に答える