打开不同的方法,但使用相同的名称 - C#

Pro*_*Man 1 php c# mysql sql-server methods

我意识到标题可能非常令人困惑,所以为了解释我想做什么,我将说明如何在PHP中轻松解决同样的问题.

例如,我为我的应用程序的用户提供了一个选择数据库类型(即MySQL,MSSQL等).

在我的代码中,我希望每个操作只有一个函数,而不是每个数据库的函数,如下所述.

main.php

<?php
function mysql_get_users() {
  //Foo
}

function mssql_get_users() {
  //Foo
}

if($dbtype == "mysql") {
  echo mysql_get_users();
}

if($dbtype == "mssql") {
  echo mssql_get_users();
}

?>
Run Code Online (Sandbox Code Playgroud)

main.php

<?php
if($dbtype == "mysql") {
  include("mysql.php");
}

if($dbtype == "mssql") {
  include("mssql.php");
}
echo get_users();
?>
Run Code Online (Sandbox Code Playgroud)

mysql.php

<?php
function get_users() {
  //Foo
}
?>
Run Code Online (Sandbox Code Playgroud)

mssql.php

<?php
function get_users() {
  //Foo
}
?>
Run Code Online (Sandbox Code Playgroud)

现在我有同样的问题,但在使用Visual Studio 2010的C#中.因为我不能这样做:

 if(dbtype=="mysql") {
    public static MySqlConnection connect(String connectionString)
    {
        MySqlConnection connection = new MySqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
Run Code Online (Sandbox Code Playgroud)

与上面的一个大问题,特别是我不能忍受的,如果子句周围的方法(功能),然后我不得不面对它们是唯一的每个数据库类型之中的事实,我必须包括返回类型的问题与数据库函数相关的每个方法中的连接变量.

那么,有关如何解决这个问题并使其像上面的PHP示例一样工作的任何想法?我既不是C#的专家也不是新手,但我学得很快.

zie*_*mer 5

您将需要研究"接口"或"代理".

接口在各种语言(包括C#和Java)中更常见,并允许您提供所有共享相同接口的不同实现(通过实现类),并且可以互换使用.

代表们也是一个相当酷的选择,但仅限于一种方法 - 这实际上可能就是您在这里寻找的方法.(与界面相比,界面定义了作为界面一部分存在的一个或多个方法).

一些额外的参考: