首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >困惑于C#中的公共、静态和私有方法/类/变量

问困惑于C#中的公共、静态和私有方法/类/变量
EN

Stack Overflow用户
提问于 2016-03-15 10:07:41
回答 3查看 2.2K关注 0票数 0

我是一个使用C#编程的初学者,来自Python背景。

我对公共关键字和静态关键字感到困惑。谁能帮我澄清一下不同之处吗?

(顺便说一句,我已经知道私有变量/方法永远不能在函数之外访问,而Public可以访问)

这是我随机尝试理解的静态方法和非静态方法之间的区别。

代码语言:javascript
复制
using System;

public class MainClass
{
    public static void Main ()
    {
        int[] anArray =  getAnArray();

        foreach (int x in anArray) 
        {
            Console.WriteLine (x);
        }

        MainClass m = new MainClass ();
        foreach (int x in anArray) 
        {
            m.Print(x);
        }
    }

    public static int[] getAnArray() 
    {
        int[] myArray = { 1, 2, 3, 4 };
        return myArray;
    }

    public void Print(int x) 
    {
        Console.WriteLine(x);
    }
}

我理解要使用非静态方法打印,首先需要创建MainClass的实例,然后通过执行m.Print()访问该方法。

但是,我不知道什么时候才能确切地使用哪一种。据我所见,如果打印是静态的,它会容易得多,因为我不需要为自己的函数创建一个新实例。

对于例如,这会更简单。

代码语言:javascript
复制
private static void Print(int x)
{
    Console.WriteLine (x);
}

并使用Print(x)调用Print函数,而不是先创建Main实例。

所以基本上什么时候用什么?什么时候使用静态或非静态的不仅是方法,而且是变量,甚至是类?(例如何时使用公共静态类MainClass)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-15 10:11:46

static成员是类成员,并在该类的所有实例之间共享。

public方法/属性可用于其他类。有可能有一个public static成员,它可供其他类使用。

不能从静态成员访问非静态成员。

如果一个函数不需要访问任何实例变量,那么它就可以通过static来稍微提高性能,但是有更多有用的方法来使用静态成员。

我的头上有一些静电的用途:

  • Singletons (创建一个受保护的构造函数,由类中的静态变量访问)
  • Console.WriteLine是静态的
  • 锁/信号量(其中只有一个在类级别上可用,由所有实例共享)

如果一个类的所有实例共享的东西是有意义的,那么就让它是静态的。

票数 -1
EN

Stack Overflow用户

发布于 2016-03-15 10:41:27

正在使用的公共/非静态和静态方法的小型自解释示例:

代码语言:javascript
复制
Car car1 = new Car();
car1.setBrand("Ford"); //public non-static method
Car car2 = new Car();
car2.setBrand("Opel"); //public non-static method

Car.CompareParameters(car1, car2); //static method

基本上,非静态方法和属性描述这类对象.

不能使用类名调用Car.setBrand() -非静态方法。

票数 2
EN

Stack Overflow用户

发布于 2016-03-15 11:01:01

作为一般的经验法则:

静态方法 static关键字使方法可以直接访问,而不必创建对象的实例。因此,任何状态或副作用都将是static,即“全局”。因此,只使用static创建纯函数,即仅从输入获得返回值的方法,而不是从方法外部读取或写入状态的方法。

static的使用是简化代码和测试之间的权衡。添加到static方法中的副作用越多,代码测试就越困难。

公共方法任何标记为public的东西都可以在整个应用程序中访问。标记某物internal将其限制为仅限于该程序集(可以将“程序集”一词视为与解决方案中的项目等效的术语),而private则将其限制为只能在类/结构中进行评估。

如果您遵循封装原则,那么要遵循的规则是始终使用private,如果需要的话只使用internal。只有当你真的需要的时候才使用public。

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

https://stackoverflow.com/questions/36008165

复制
相关文章

相似问题

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