方法可以采用不同类

时间:2016-03-27 01:04:35

标签: c# function object methods

我有两个在两个不同类中找到但具有相同属性的对象。我想在其中一个对象中执行一个函数,并使用我想要的对象(一个或另一个)调用此方法

此方法可以达到一个或另一个的属性

2 个答案:

答案 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的更多详情。