我有两个在两个不同类中找到但具有相同属性的对象。我想在其中一个对象中执行一个函数,并使用我想要的对象(一个或另一个)调用此方法
此方法可以达到一个或另一个的属性
答案 0 :(得分:1)
听起来你应该重构类,因为具有相同属性的两个类听起来像代码重复。
但是如果你需要这样做(不知道你的问题),你可以使用一个接口。因此,如果我们有两个存储名称的类,他们可以实现类似的接口:
因此,接口定义了实现它的类将执行的操作 - 如合同。
interface INameable
{
public string Name { get; set; }
}
然后让你的类实现接口:
class Pet : INameable
{
public string Name { get; set; }
}
class Person : INameable
{
public string Name { get; set; }
}
最后有一个方法,它接受一个接口类型的对象:
public void MyMethod(INameable nameableObject)
{
// do stuff
}
现在,您可以将任何实现INameable的对象传递给MyMethod调用 - 在本例中为Pet或Person。
答案 1 :(得分:1)
方法可以采用不同类的两个对象吗?
我将此解释如下:
我需要一种方法,无论实现如何,都可以采用相同的对象
就像我在评论中提到的那样,您应该使用interface
- 请考虑以下事项:
public interface ICommonObject
{
int Id { get; }
string Name { get; }
}
public class ObjectOne : ICommonObject
{
int Id { get; }
string Name { get; }
public ObjectOne(int id, string name)
{
Id = id;
Name = name;
}
}
public class ObjectTwo : ICommonObject
{
int Id { get; }
string Name { get; }
public ObjectTwo(int id, string name)
{
Id = id;
Name = name;
}
}
然后在您的方法中,将ICommonObject
接口作为参数 - 这样可以将实现作为参数传递给它。像这样:
public class CommonLogic
{
public void ActOnCommonObject(ICommonObject commonObject)
{
// TODO: do somthing with "commonObject"
}
}
现在你可以拥有一个公共对象的实例,只要它实现了该接口它就是一个有效的参数。以下代码没问题:
{
var logic = new CommonLogic();
var one = new ObjectOne();
var two = new ObjectTwo();
logic.ActOnCommonObject(one);
logic.ActOnCommonObject(two);
}
你留下了一个封装的逻辑片段,它可以对特定的实现起作用,可以很容易地进行单元测试。
有关interface
实施check out this MSDN article的更多详情。