在类之间共享代码

时间:2012-05-21 19:43:48

标签: c#

假设我有一个像这样的简单函数:

public static string randomthing(string var1) 
{
    string var2 = "hello world";
    return var2;
}

我希望能够从不同的类中调用它。我该怎么办?

我尝试创建一个空白文件,只是将功能粘贴在那里,但当然不会那样。

4 个答案:

答案 0 :(得分:4)

如果要共享代码,则需要创建可供其他类使用的第三个类。

这可以作为扩展方法,静态类或常规类(意味着您需要该类的实例)来完成。

静态类:

public static MyClass
{
    public static string randomthing(string var1) {

        string var2 = "hello world";
        return var2;
    }
}

// Call it: MyClass.randomthing("a string");

扩展方法:

public MyClass
{
    public static string randomthing(this string var1) {

        string var2 = "hello world";
        return var2;
    }
}

// Call it: "a string".randomthing();

常规课程:

public static MyClass
{
    public static string randomthing(string var1) {

        string var2 = "hello world";
        return var2;
    }
}

// Call it: var myClass = new myClass(); 
//          myClass.randomthing("a string");

答案 1 :(得分:4)

方法只能是类的一部分。所以在类(或struct)中声明它,当它只是静态方法的集合时,它可以是静态的:

class RandomThings
{
    public static string randomthing(string var1) {
        string var2 = "hello world";
        return var2;
     } 
}

现在您可以通过ClassName.MethodName

调用此方法
String randomString = RandomThings.randomthing("hello world");

Methods (C# Programming Guide)

答案 2 :(得分:1)

您可以使类静态并从另一个类调用它,而无需实例化类本身。

public static class Utility {
    public static string randomthing(string var1) {

                string var2 = "hello world";

                return var2;

    }
}

public class UsingTheCodeHere
{

    public string SayingHelloWorld()
    {
        return Utility.randomthing();
    }

}

你也可以使用继承来实现类似的东西。

public class Person 
{
     public string SayHello()
     {
         return "Hello"; 
     }
}

public class LoudMouth : Person
{
    public override string SayHello()
    {
        return base.SayHello() + "!!!!";
    }
}

public class SadPerson : Person
{
    public override string SayHello()
    {
        return base.SayHello() + " I am sad";
    }
}

答案 3 :(得分:0)

由于函数是static,只需使用附带的类名称调用它:

public class Foo
{
   public static string randomthing(string var1)
   {
      string var2 = "hello world";
      return var2;
   }
}

public class OtherClass
{  
    public OtherClass()
    {
       // In constructor
       string here1 = Foo.randomthing("x");
    }

    public void OrInSomeFunction()
    {
       string here2 = Foo.randomthing("x");
    }
}