繁体   English   中英

c#是否允许仅针对扩展方法跳过对静态类的引用?

[英]Does c# allow skipping reference to a static class only for extension methods?

这显示了http://msdn.microsoft.com/en-us/library/bb311042.aspx可以跳过对公共静态命名空间中的公共静态扩展类的引用。 但是,它不适用于公共静态变量。

using UnityEngine;
using System.Collections;
namespace NDefault
{
    public static class TDefault
    {
        public static int CNT=71;
        public static bool has_method(this object target,string method_name)
        {
            return target.GetType().GetMethod(method_name)!=null;
        }
    }
}

_

  using UnityEngine;
using System.Collections;
using NDefault;

public class TController :MonoBehaviour
{
    void Start () 
    {
        int t;
        print (t.has_method("GetType")); //This prints "True"
        print (CNT);//This creates error "The name `CNT' does not exist in the current context"

    }
    void Update () 
    {

    }
}

我是对的,对于使用没有类引用的静态变量和方法,我必须从包含它们的非静态默认类继承所有类,而对于扩展方法,我应该在命名空间中创建一个单独的静态类? 即我不能将它们存放在一起?

您可以在同一个静态类中使用扩展方法和常规静态方法/属性。 为清楚起见,最好将它们分开。

访问静态属性/方法时,必须指定它们所属的类。 因此要访问CNT静态属性

int cnt = TDefault.CNT;

在你的情况下,它将是

print (TDefault.CNT);

此规则也适用于扩展方法。 对于扩展方法,您必须为定义扩展方法的命名空间使用using语句。您还必须指定扩展方法所针对的对象。 在您的示例中,您的扩展方法适用于所有类。 除非您为所有类增加值,否则通常不建议这样做。 你通常想要指定一个特定的类

public static class Extensions
{
    public static bool NewMethod(this MyObject source)
    {
        return true;
    {
}

上述方法仅适用于MyObject类,而不适用于其他类。 与“普通”静态方法不同,扩展方法需要对象的实例才能用作“扩展方法”。 以下两个样本都可以使用。

MyObject o = new MyObject();
bool val = o.NewMethod();

// this also will get the value
val = Extensions.NewMethod(o);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM