首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与System.ApplicationId混淆;

与System.ApplicationId混淆;
EN

Stack Overflow用户
提问于 2016-04-08 04:50:24
回答 2查看 96关注 0票数 0

阅读和混乱来理解静态类和静态方法,以及它们与非静态方法的区别和它们的用法,我仍然不了解它们的用法,除了主要的方法之外,这个方法不能成为类的实例(对象)。

为什么我试着用:

代码语言:javascript
复制
using static System.ApplicationId;

public class Program
{
    static void Main()
    {
        Copy(SOMETHING)// Copy method doesn't exist
    }
}

然后尝试使用来自ApplicationId (如Copy(); )的方法。

IDE?找不到方法了?

做同样的事:

代码语言:javascript
复制
using static System.Console;

public class Program
{
    static void Main()
    {
        Writeline("Hello"); // OK
    }
}

然后尝试从Console中找到一种类似于WriteLine();的方法

它可以找到它,我也可以用它。

为什么会发生这种事?

我的理解是,他们都是静态成员吗?这就是为什么我不能做这两个类的实例的原因吗?但是,我可以在第二个示例中使用这些方法,但不能在第一个示例中使用,因为它似乎不允许我使用(错误: copy()在当前的上下文中不存在.)。

EN

回答 2

Stack Overflow用户

发布于 2016-04-08 04:58:23

答案很简单,ApplicationId中的方法没有标记为static

让我们看看静态方法和实例方法之间的区别:

静态方法:

代码语言:javascript
复制
Console.WriteLine();
******* *********
 ^         ^
class    method
name     name

实例方法:

代码语言:javascript
复制
Random aRandomObject = new Random();
aRandomObject.Next();
************* ****
      ^        ^
name of an    method
instance of   name
Random

正如您在这里看到的,您需要该类的一个实例才能使用非静态方法。但是对于静态方法,您不需要实例。

using static指令允许您在调用静态方法时省略类名。

“但是为什么它不允许我们调用这样的实例方法呢?”是你问的。正如我前面所说的,您需要一个实例来调用实例方法。如果只编写方法名来调用该方法,那么编译器如何知道要调用它的哪个实例?

票数 2
EN

Stack Overflow用户

发布于 2016-04-08 04:55:07

ApplocationId不是一个静态类,因此需要创建它的一个实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36491747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档