在调用方法时,何时引用该类,以及何时引用该对象?

时间:2017-10-19 21:31:54

标签: c#

因此,当您调用方法时,您如何知道何时引用该对象,以及您如何知道何时引用该类?例如:

为什么

String.IsNullOrEmpty(myStr);

而不是

myStr.IsNullOrEmpty();

3 个答案:

答案 0 :(得分:2)

当方法是静态时 - 引用该类。

当方法不是静态时 - 实例。

(还有其他案例,例如扩展方法......但我认为这是你正在寻找的。)

对于您带来的案例:请参阅"语法"下的the docs

  公共静态 bool IsNullOrEmpty [强调我的]

答案 1 :(得分:1)

静态方法不需要要执行的类的实例,IsNullOrEmpty()就是这样的一个 - 你用classname作为前缀。

某些静态方法(扩展)可用于扩展您未编写的类,并“添加”可用于类的方法。

实施例

// must be a top lvl class to enable declaring extension method
public static class StringExt
{
    public static bool IsSet(this string s)
      => s != null && s.Trim().Length > 0;
}

然后可以if ("blablubb".IsSet()) ...if (StringExt.IsSet("blablubb")) ...来调用。

所以简短的回答是阅读API(有时缩短为RTFM)并查看签名。

string.IsNullOrEmpty()

不是Extension方法,它只是一个静态方法,它没有使用字符串实例内部数据的依赖关系 - 所以它在字符串类中被声明为static - 类似于

public static bool IsNullOrEmpty(string s)
{
    // look up implementation here:
    // http://referencesource.microsoft.com/#mscorlib/system/string.cs
}

link to IsNullOrEmpty

答案 2 :(得分:1)

  

您如何知道何时引用该对象,以及您如何知道何时引用该类?

通过查看方法声明。如果声明了instance方法(普通方法),你应该以这种方式调用方法。

myStr.IsNullOrEmpty();

如果声明了静态方法(方法签名包含static关键字),您应该以这种方式调用方法。

String.IsNullOrEmpty(myStr);

其中String是类的名称,IsNullOrEmpty是该类中静态方法的名称。

有时静态方法被声明为扩展方法(静态方法的第一个参数以this关键字为前缀),因此您可以用两种相同的方式调用它们。

String.IsNullOrEmpty(myStr);    
myStr.IsNullOrEmpty();

假设IsNullOrEmpty是扩展方法,两种语法都可以正常工作并且完全相同(请注意,这种方法在.Net框架中不存在,但您可以自己编写)。