2010-05-16 56 views
0

使用時,我有我想從,我所有的DAO對象繼承基類型沒有發現F#成員,但該成員獲得誤差進一步下降約沒有被定義爲:爲什麼在子類

type BaseDAO() = 
    member v.ExecNonQuery2(conn)(sqlStr) = 
     let comm = new MySqlCommand(sqlStr, conn, CommandTimeout = 10) 
     comm.ExecuteNonQuery |> ignore 
     comm.Dispose |> ignore 

我這種類型的繼承:

type CreateDatabase() = 
    inherit BaseDAO() 

    member private self.createDatabase(conn) = 
     self.ExecNonQuery2 conn "DROP DATABASE IF EXISTS restaurant" 

這是我看到的時候我的腳本在交互式shell中運行:

--> Referenced 'C:\Program Files\MySQL\MySQL Connector Net 6.2.3\Assemblies\MySql.Data.dll' 

[Loading C:\Users\jblack\Documents\Visual Studio 2010\Projects\RestaurantService\RestaurantDAO\BaseDAO.fs] 

namespace FSI_0106.RestaurantServiceDAO 
    type BaseDAO = 
    class 
     new : unit -> BaseDAO 
     member 
     ExecNonQuery2 : conn:MySql.Data.MySqlClient.MySqlConnection -> 
          sqlStr:string -> unit 
     member execNonQuery : sqlStr:string -> unit 
     member 
     execQuery : sqlStr:string * 
        selectFunc:(MySql.Data.MySqlClient.MySqlDataReader -> 
            'a list) -> 'a list 
     member f : x:obj -> string 
     member Conn : MySql.Data.MySqlClient.MySqlConnection 
    end 

[Loading C:\Users\jblack\Documents\Visual Studio 2010\Projects\RestaurantService\RestaurantDAO\CreateDatabase.fs] 


C:\Users\jblack\Documents\Visual Studio 2010\Projects\RestaurantService\RestaurantDAO\CreateDatabase.fs(56,14): error FS0039: The field, constructor or member 'ExecNonQuery2' is not defined 

我很好奇我做錯了什麼。

我試過不繼承,只是在函數中實例化BaseDAO類型,但我得到了同樣的錯誤。

我開始在這條路上,因爲我有一個屬性有相同的錯誤,所以它似乎可能有一個問題,我如何定義我的BaseDAO類型,但它編譯沒有錯誤,這進一步混淆了我對此問題。

回答

2

看起來你可能是個別文件,也許你在歷史中有一些東西,而你繼承的類在另一個命名空間/模塊中,並且你繼承了一些沒有這個的舊版本會員?

重置您的fsi會話並重新開始,或將其放在.fs文件中以診斷是否有任何錯誤,但我認爲代碼沒問題,問題在於您如何與FSI交互。

+0

我沒想過重置fsi會話。這似乎是訣竅。謝謝。 – 2010-05-16 05:20:57

相關問題