因此,当您调用方法时,您如何知道何时引用该对象,以及您如何知道何时引用该类?例如:
为什么
String.IsNullOrEmpty(myStr);
而不是
myStr.IsNullOrEmpty();
答案 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
}
答案 2 :(得分:1)
您如何知道何时引用该对象,以及您如何知道何时引用该类?
通过查看方法声明。如果声明了instance方法(普通方法),你应该以这种方式调用方法。
myStr.IsNullOrEmpty();
如果声明了静态方法(方法签名包含static
关键字),您应该以这种方式调用方法。
String.IsNullOrEmpty(myStr);
其中String
是类的名称,IsNullOrEmpty
是该类中静态方法的名称。
有时静态方法被声明为扩展方法(静态方法的第一个参数以this
关键字为前缀),因此您可以用两种相同的方式调用它们。
String.IsNullOrEmpty(myStr);
myStr.IsNullOrEmpty();
假设IsNullOrEmpty
是扩展方法,两种语法都可以正常工作并且完全相同(请注意,这种方法在.Net框架中不存在,但您可以自己编写)。