C# 快速引用静态方法
是否有可能在不引用其类的情况下调用方法 例如,您有一个助手类:C# 快速引用静态方法,c#,class,methods,reference,shortcut,C#,Class,Methods,Reference,Shortcut,是否有可能在不引用其类的情况下调用方法 例如,您有一个助手类: class HelperTools { public static void DoWork() { /*...*/ } } 然后你需要称之为: class MainClass { public static void Main() { HelperTools.DoWork(); } } 是否可以调用DoWork()没有引用?像这样: public static void M
class HelperTools
{
public static void DoWork()
{ /*...*/ }
}
然后你需要称之为:
class MainClass
{
public static void Main()
{
HelperTools.DoWork();
}
}
是否可以调用DoWork()代码>没有引用?像这样:
public static void Main()
{
DoWork();
}
只是为了简单起见。不。Java有这样导入静态的概念,但C#没有。(在我看来,没有任何关于实现所在位置的线索的裸DoWork()
是不理想的。)在不引用类名的情况下,可以调用DoWork
的唯一位置是类本身。例如,如果将非静态方法添加到HelperTools
:
public void foo()
{
DoWork();
}
您可以从内部调用DoWork
,即使foo()
不是静态的。不完全是静态的,但这里有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();
}
}
}
几年后,但也许这会帮助其他人
使用using static
指令引用静态类:()
为什么?这有什么实际用途?严肃的问题,我很好奇。有一些方法可以做到这一点(例如,调用静态方法的私有方法,使其成为class MainClass:HelperTools
,动态调用),但对于熟悉C#中通常如何做的人来说,这是非常违反直觉的。普通的C#方法是简单地调用HelperTools.DoWork()对于扩展方法,myObj.MyExtensionMethod()
@SimonWhitehead Simplicity。注意“快捷方式”标签-我只是在寻找调用方法的更快方法。关闭,但这个答案不太准确;第一句是错的。它应该是“在不引用类名的情况下调用DoWork的唯一地方是在DoWork的范围内”。由于DoWork是内部类的公共方法,因此可以在派生类的主体中使用其非限定名称。是的,这是理想的。时间就是金钱,并不是所有的课程都很复杂,充满了大量的课程用途。
using static HelperTools;
class MainClass
{
public static void Main()
{
DoWork();
}
}
---------------- HelperTools.cs--------------------
class HelperTools
{
public static void DoWork()
{ /*...*/ }
}