English 中文(简体)
班级间共享代码
原标题:Share code between classes
  • 时间:2012-05-21 19:43:47
  •  标签:
  • c#

假设我有一个简单的功能像这样:

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

我想从不同的班级里叫它。我该怎么做呢?

我试图创建空白文件,只是把函数粘贴到那里,但当然不起作用。

最佳回答

如果您想要共享代码,需要创建可供其他类使用的第三等级。

这可以作为一种推广方法、静态类或普通类(是指你需要一个类的例子)来进行。

静态类 :

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");
问题回答

方法只能是类的一部分。 所以在类( 或 < a href=" http:// msdn. microsoft. com/ en- us/library/ah19swz4%28v=vs. 100%29. aspx" rel = "nofollow" >struct ) 中声明它, 当它只是静态方法的集合时, 它可以是静态的 :

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

现在您可以通过 ClassName.MethodName 调用此方法:

String randomString = RandomThings.randomthing("hello world");

方法(C#prography 指南)

你可以让班级静态, 并把它从另一个班级调来, 而不必对班级本身进行即时处理 。

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";
    }
}

由于函数为 < a href=>", http://msdn.microsoft.com/ en- us/library/79b3xss3%28v=vs. 80%29.aspx" rel="nofollow">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");
    }
}




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签