如何通过将不同的类对象传递给同一个方法来重用方法?

时间:2014-05-15 19:32:00

标签: c#-4.0

如何通过传递不同的类对象来重用方法?我有2个不同的类,ClassOne和ClassTwo,在方法ProcessMessage中我也要传递Class,但是如何? 在某种程度上像这样// ProcessMessage(classText,objectTwo);

class ClassOne
{
    public string MethodOne()
    {
        return ("ClassOne");
    }
}



class ClassTwo 
{
    public string MethodOne()
    {
        return ("ClassTwo");
    }
}


class Program
{
    static void Main()
    {
        var objectOne = new ClassOne();
        var classText = objectOne.MethodOne();
        ProcessMessage(classText, objectOne);


        var objectTwo = new ClassTwo(); 
        classText = objectTwo.MethodOne();
        //ProcessMessage(classText, objectTwo);

        Console.ReadKey();
    }

    public static void ProcessMessage(string classText, ClassOne testClass)
    {
        Console.WriteLine("ClassText:{0}", classText);
    }
}

如果我使用它(在得到你们的帮助之后),我知道知道,我该如何使用testClass?

喜欢:var text = testClass.MethodOne();什么

public static void ProcessMessage(string classText, ClassOne testClass)
{
    Console.WriteLine("ClassText:{0}", classText);
}

3 个答案:

答案 0 :(得分:2)

我不确定你为什么要这样,因为你没有在testClass任何地方使用ProcessMessage参数。但是你可以使用泛型方法将任何类型的类传递给你的方法: / p>

public static void ProcessMessage<T>(string classText, T testClass) 
     where T : class
{
    Console.WriteLine("ClassText:{0}", classText);
}

另一种方法是为ClassOneClassTwo创建公共接口或基类。并更改方法:

public static void ProcessMessage(string classText, CommonInterface testClass) 
{
    Console.WriteLine("ClassText:{0}", classText);
}

答案 1 :(得分:1)

可以使用泛型,但像Prera​​k K说的那样,为什么?

    class ClassOne
{
    public string MethodOne()
    {
        return ("ClassOne");
    }
}



class ClassTwo
{
    public string MethodOne()
    {
        return ("ClassTwo");
    }
}


class Program
{
    static void Main()
    {
        var objectOne = new ClassOne();
        var classText = objectOne.MethodOne();
        ProcessMessage(classText, objectOne);


        var objectTwo = new ClassTwo();
        classText = objectTwo.MethodOne();
        ProcessMessage(classText, objectTwo);

        Console.ReadKey();
    }

    public static void ProcessMessage<T>(string classText, T testClass)
    {
        Console.WriteLine("ClassText:{0}", classText);
    }
}

答案 2 :(得分:1)

或者您可以创建这样的界面:

interface IProcessable {
    string MethodOne();
}

class ClassOne : IProcessable
{
    public string MethodOne()
    {
        return ("ClassOne");
    }
}

class ClassTwo : IProcessable
{
    public string MethodOne()
    {
        return ("ClassTwo");
    }
}

class Program
{
    static void Main()
    {
        IProcessable objectOne = new ClassOne();
        var classText = objectOne.MethodOne();
        ProcessMessage(classText, objectOne);

        IProcessable objectTwo = new ClassTwo(); 
        classText = objectTwo.MethodOne();
        ProcessMessage(classText, objectTwo);
        Console.ReadKey();
    }

    public static void ProcessMessage(string classText,  IProcessable testClass)
    {
        Console.WriteLine("ClassText:{0}", classText);
    }
}