【问题标题】:Why do we use public methods?为什么我们使用公共方法?
【发布时间】:2022-01-06 19:32:44
【问题描述】:

我有一个关于公共和静态方法的问题。我是 C# 编码的新手,我知道只能使用对象访问公共方法。但是,可以在没有类对象的情况下访问静态方法。但是使用公共方法有什么意义呢?为什么不总是使用静态方法?

【问题讨论】:

  • “为什么不总是使用静态方法” - 你的想法是不是personInstance.Walk(); 你应该有Person.Walk(personInstance); 或者PersonMethods.Walk(personInstance);(即定义在与Person 本身分开的类)?
  • 对象和类是不同的

标签: c# methods


【解决方案1】:

publicstatic 关键字不相关。

您可以使用public static 方法。公共意味着该方法(或其他类成员(例如,属性、字段、委托、枚举、内部类))可供属于另一个类的代码使用(替代方案是private、@ 987654325@ 和一些组合)。

static 关键字表示访问该成员不需要类的实例。在某些方面,您可以将static 成员视为属于 类,而非静态成员属于 属于类的一个实例。 VB 语言强调这个隐喻,使用Shared 而不是static 来描述静态成员(强调静态成员在类的所有成员之间共享)。

使用非静态成员有很大的优势(查看封装 - 这是一个很好的面试流行语)。面向对象的思维模式是一个对象代表一个数据结构(C# 中的 classstruct)以及可以在该数据结构上完成的操作。这些操作是类的非静态方法。

【讨论】:

    【解决方案2】:

    我认为 Flydog57 的回答要完整得多。在我的回答中,我将添加代码示例,希望它更容易理解。

    Public - 访问修饰符,用于确定可以从何处访问您的代码(方法/类/等)。 Public 没有任何限制,因此您基本上可以从任何地方访问您的代码。另一方面,如果一个方法或属性或其他东西是private,您只能从它所属的类中访问它。还有其他访问修饰符,请查看here

    静态 - 静态是一个修饰符关键字,它决定了你的方法、属性等应该使用类的对象访问还是应该直接使用类名访问。

    在下面的代码中,加法是静态的,但减法不是静态的。所以,我们只能用对象访问减法。为了访问 Add,我们需要使用类名“Math.AddAdd(5, 4)”。注意:输出在评论中给出。

    class Math
    {
        public static int Add(int a, int b)
        {
            return a + b;
        }
    
        public int Subtraction(int a, int b)
        {
            return a - b;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Math math = new Math();
            Console.WriteLine(math.Subtraction(10,4)); // 6
            Console.WriteLine(math.Add(5, 4)); // Error CS0176  Member 'Math.Add(int, int)' cannot be accessed with an instance reference;
        }
    }
    

    现在,如果我们删除公共访问修饰符。我们得到以下错误。因为不再可以从类的外部访问这些方法。看看这里看看default access modifiers of different types

    class Math
    {
        static int Add(int a, int b)
        {
            return a + b;
        }
    
        int Subtraction(int a, int b)
        {
            return a - b;
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Math math = new Math();
            Console.WriteLine(math.Subtraction(5, 4)); // Error CS0122  'Math.Subtraction(int, int)' is inaccessible due to its protection level
            Console.WriteLine(math.Add(5, 4)); // Error CS0122  'Math.Subtraction(int, int)' is inaccessible due to its protection level
        }
    }
    

    您何时使用它们: 这两者都有很多用例。在下面的示例中,我使用静态属性 TotalStudent 来计算学生(对象)的总数。虽然我使用 Name 属性来保留该特定对象独有的信息。同样像上面的数学示例 c# 和许多其他编程语言都有 Math 静态类,可以让您进行求和、加法和其他操作。

    class Student
    {
        public string Name { get; set; }
        public static int TotalStudent { get; set; } = 0;
    
        public Student(string name)
        {
            Name = name;
            TotalStudent++;
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Student s1 = new Student("Bob");
            Console.WriteLine(s1.Name); // Bob
            Console.WriteLine(Student.TotalStudent); // 1
            Student s2 = new Student("Alex");
            Console.WriteLine(s2.Name); // Alex
            Console.WriteLine(Student.TotalStudent); // 2
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2015-02-01
      • 2012-03-07
      • 1970-01-01
      相关资源
      最近更新 更多