代码之家  ›  专栏  ›  技术社区  ›  James Black

为什么在子类中使用f成员时找不到?

  •  0
  • James Black  · 技术社区  · 14 年前

    对于我的所有DAO对象,我都有一个要从中继承的基类型,但此成员在未定义时会进一步出错:

    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 输入函数,但得到相同的错误。

    我从这条路径开始,因为我有一个具有相同错误的属性,所以似乎在如何定义我的 巴斯岛 类型,但它编译时没有出错,这进一步使我对这个问题感到困惑。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Brian    14 年前

    看起来你可能是 #load 处理单个文件,也许您的历史中有一些东西,而您要继承的类在另一个命名空间/模块中,并且您要继承一些没有该成员的旧版本?

    重置您的FSI会话并重新开始,或者将其放入.fs文件中以诊断是否有任何问题,但我认为代码是正常的,问题在于您如何与FSI交互。

    推荐文章