using System;
class Runner
{
static void Main()
{
A a = new A();
// how to say a.PrintStuff() without a 'using'
Console.Read();
}
}
class A { }
namespace ExtensionMethod
{
static class AExtensions
{
public static void PrintStuff(this A a)
{
Console.WriteLine("text");
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何在没有"使用"的情况下调用扩展方法?而不是ExtensionMethod.AExtensions.PrintStuff(a),因为那不使用扩展方法.
Aar*_*nLS 18
可以像这样直接调用你的扩展,因为它只是一个静态方法,传递它将作为第一个this参数的实例:
A a = new A();
ExtensionMethod.AExtensions.PrintStuff(a);
Run Code Online (Sandbox Code Playgroud)
如果您按照此模式使用更常用的扩展方法,则可能会对发生在此代码中的其他开发人员造成混淆.它还会使像LINQ这样的链接扩展调用更像是一种函数式语言,因为你将嵌套每个调用而不是链接它们.
Dam*_*ith 12
如果扩展方法和类A在同一名称空间中,
如果你必须使用不同的命名空间,那么你必须使用using,我认为没有办法在没有它的情况下做到这一点using.但是你可以using通过将所有扩展放在一个名称空间中来减少数量,例如Linq(System.Linq.Extensions)
注意:您可以删除Extension方法的命名空间,然后它将使它们全局可用
它需要using知道函数的位置.Linq中的一个例子.如果没有System.Linq使用 - 你将不会为你IEnumerable<T>'的任何一个启用linq
但是,您可以在与调用方相同的命名空间中定义扩展方法,以避免使用.但是,如果在许多名称空间中需要它,则该方法将不起作用
这让我感觉很脏,但是您可以将扩展方法放在 System 命名空间中。默认情况下,您的问题中包含此命名空间
using System;
class Runner
{
static void Main()
{
A a = new A();
// how to say a.PrintStuff() without a 'using'
Console.Read();
}
}
class A { }
namespace System
{
static class AExtensions
{
public static void PrintStuff(this A a)
{
Console.WriteLine("text");
}
}
}
Run Code Online (Sandbox Code Playgroud)