c# - 如何声明两个类以便将它们传递给同一个函数?

标签 c# inheritance abstract-class

给定以下两个类

public class LocalFoo {

}

public class RemoteFoo {

}

这两个类应该有相似的属性:

public string strBar{ get; set; }
public int intBar{ get; set; }

不同之处在于程序如何设置和读取这些属性——在前一种情况下,属性是在本地处理的。在后者中,属性直接从数据库读取和写入,两个 DataTable 从数据库读取。

我知道继承必须在这里发生,但这就是我遇到困难的地方。

例如,如果我声明一个方法 TakesFoo :

public void takesFoo( Foo bar ){
    /*Magic Happens Here*/
}

我希望能够使用 LocalFooRemoteFoo 类型的对象调用该方法。

我知道我可以写一个抽象类 Foo :

public abstract class Foo{
}

并且 LocalFoo 和 RemoteFoo 都继承自它,但有一个警告 - 我有另一个抽象类,我需要 RemoteFoo 继承它,它用于使读取/写入数据表更容易 -

public abstract class DRHelper : IEquatable<DRHelper>, IDisposable {
}

我最初的直觉是让 Foo 成为一个接口(interface),但我不知道这是否可行,我希望有人能给我一些指导,告诉我应该如何处理这个问题。

最佳答案

创建一个具有以下内容的 IFoo 接口(interface):

string strBar{ get; set; }
int intBar{ get; set; }

类 LocalFoo 和类 RemoteFoo 都需要实现 IFoo 接口(interface)。

然后将您的方法更改为:

public void takesFoo( IFoo bar ){
    /*Magic Happens Here*/
}

关于c# - 如何声明两个类以便将它们传递给同一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35414616/

相关文章:

java - 如何使用与强制调用其他方法链接的抽象方法

c++ - 为什么 gcc 和 clang 允许我构造一个抽象类?

java - C++中Java接口(interface)的等价物?

c# - 如何将所有文件扩展名从 Gif 更改为 gif?

c# - 导致错误的阶乘方法

ios - 如何在我正在子类化的类中返回 Swift 中的泛型类型

java - 如何打破父类(super class)构造函数链?

c# - 禁止覆盖派生类中的方法

c# - (ID/ParentID) 列表到分层列表

c# - 当 MVC 客户端时执行挂起,但当客户端是控制台应用程序或测试项目时执行正常