是否有可能在没有引用其类的情况下调用方法?
例如,你有一个助手类:
class HelperTools
{
public static void DoWork()
{ /*...*/ }
}
然后你需要打电话给它:
class MainClass
{
public static void Main()
{
HelperTools.DoWork();
}
}
是否可以在没有参考的情况下致电DoWork();
?像这样:
public static void Main()
{
DoWork();
}
为了简单起见。
答案 0 :(得分:6)
不完全,但这里有5种模式可以让你接近:
namespace My.Namespace
{
using H = MyHelperClass;
public class MyHelperClass
{
public static void HelperFunc1()
{
Console.WriteLine("Here's your help!");
}
}
public class MyHelperClass2
{
public static void HelperFunc4()
{
Console.WriteLine("Here's your help!");
}
}
public interface IHelper{ }
public static class HelperExtensions
{
public static void HelperFunc3(this IHelper self)
{
Console.WriteLine("Here's your help!");
}
}
public class MyClass : MyHelperClass2, IHelper
{
private static readonly Action HelperFunc2 = MyHelperClass.HelperFunc1;
private static void HelperFunc5()
{
Console.WriteLine("Here's your help!");
}
public void MyFunction()
{
//Method 1 use an alias to make your helper class name shorter
H.HelperFunc1();
//Method 2 use a class property
HelperFunc2();
//Method 3 extend an interface that has extension methods.
//Note: you'll have to use the this keyword when calling extension
this.HelperFunc3();
//Method 4 you have access to methods on classes that you extend.
HelperFunc4();
//Method 5 put the helper method in your class
HelperFunc5();
}
}
}
答案 1 :(得分:3)
没有。 Java有像这样导入静态的概念,但C#没有。 (IMO,一个裸体DoWork()
,没有任何关于实现所在位置的线索是不理想的。)
答案 2 :(得分:0)
唯一可以在不引用类名的情况下调用DoWork
的地方就在类本身内。例如,如果您向HelperTools
添加非静态方法:
public void foo()
{
DoWork();
}
您可以在其中调用DoWork
,即使foo()
不是静态的。
答案 3 :(得分:0)
晚了几年,但这也许会帮助别人...
使用using static
指令引用静态类:(introduced in C# 6)
using static HelperTools;
class MainClass
{
public static void Main()
{
DoWork();
}
}
---------------- HelperTools.cs--------------------
class HelperTools
{
public static void DoWork()
{ /*...*/ }
}