【问题标题】:Create a C# method that accepts multiple types of objects?创建一个接受多种类型对象的 C# 方法?
【发布时间】:2013-04-05 19:39:07
【问题描述】:

我正在编写一个类来处理我的数据事务。我想创建一种方法来处理多个对象,而不是为每种对象类型使用不同的方法。

例如,假设我有对象类型:汽车、卡车、房屋。每个对象都有一个属性,该属性保存应用于创建数据库的字段和类型的名称。同样,每个对象都有一个名为 PrintFieldsWithType() 的方法,可以将它们作为 SQL 查询的一部分打印出来。

我一直在尝试类似的东西:

private void CreateTable(string tblname, Object tempobject)
    {
        //Construct Command String from Params
        string mycommand = "CREATE TABLE " + tblname + tempobject.PrintFieldsWithType();
        tempobject = null;
        //Construct object and execute query
        command = new SQLiteCommand(mycommand, myconnection);
        command.ExecuteNonQuery();
    }

我不想为每种对象类型创建不同的方法,而是希望能够像这样调用此方法: CreateTable(NewCars, Car myCar); CreateTable(CheapHouses, House myHouse);

我是否试图以错误的方式处理这个问题?
有一个更好的方法吗?

提前感谢您的帮助。

【问题讨论】:

    标签: c# oop


    【解决方案1】:

    我是否试图以错误的方式处理这个问题?

    是的,因为Object 不包含PrintFieldsWithType 的定义,所以您的代码将无法编译。

    有没有更好的方法来做到这一点?

    创建一个定义这些类型共有的属性/方法的接口:

    public interface IThing //(please come up with a better name)
    {
        public string PrintFieldsWithType();
    }
    

    并让每种类型都实现该接口:

    public class Car : IThing
    

    等等

    然后将CreateTable改为

    private void CreateTable(string tblname, IThing tempobject)
    

    如果PrintFieldsWithType实现对于每种类型完全相同,那么您可以将其设为基类而不是接口,但由于类只能有一个直接基类,但可以实现多个接口,你需要明智地选择。

    【讨论】:

    • IFieldsWithTypePrinter? ^^
    • 这就是接口的用途。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2011-10-20
    • 2011-06-28
    • 2016-01-25
    • 2022-11-16
    • 2020-09-14
    相关资源
    最近更新 更多