除了创建帮助器之外,创建静态方法的理想情况(实际示例)是什么?

Lea*_*sed 7 .net c# oop static static-methods

我只是想了解静态方法所服务的目的以及我可以创建静态方法的理想情况,除了有人会说静态方法用于创建帮助器.

考虑我有一个网站将在我的公司使用,就像人力资源管理系统,如网站.

现在管理员登录系统管理员后会看到员工列表.所以方法很简单,除了从员工表中获取员工的所有详细信息并将在网站上显示,这个方法将在业务中定义在.net中访问这样的层:

 public class EmployeeBal
    {
        public List<Employee> GetAllEmployees()
        {
                 return Select * from Employee
        }
     }
Run Code Online (Sandbox Code Playgroud)

这就是我如何从我的应用程序中调用此方法.对于Eg(.aspx页面或mvc控制器等....)

var employeeBal= new EmployeeBal();
employeeBal.GetAllEmployees();
Run Code Online (Sandbox Code Playgroud)

所以我的问题是我应该将此方法创建为静态方法还是非静态方法?

注意:这只是方法的一个示例,此方法位于我的业务访问层中.

考虑我有一个电子商务网站,在主页上我显示一些产品列表,并在访问该网站时,每个用户都可以看到该产品列表.

所以我的功能与上面在Business acess层中定义的相同:

public class ProductBal
    {
        public List<Product> DisplayProductonHomePage()
        {
                 return Select * from Products
        }
     }
Run Code Online (Sandbox Code Playgroud)

所以我的问题与是否将此方法创建为静态方法或非静态方法相同,如果超过10个用户同时访问此网站将会发生什么,那么这种方法的行为/含义是什么?

如果我们将此方法声明为静态,此方法是否会满足每个用户的需求?

有人可以简单解释每个场景来回答这个问题吗???

Kon*_*lph 8

当没有要维护的状态时,静态方法是有意义的.国家是什么意思?那么,考虑以下问题:你有两个不同的对象,a并且b,这两者都是类型EmployeeBal.是否有在你的程序的情况下a.GetAllEmployees(),并b.GetAllEmployees()会产生不同的结果?

如果没有,那么为什么对象a,并b在所有的存在吗?拥有对象的重点是将一些不同的状态与它们联系起来.如果两个不同的对象永远不能引用不同的状态,那么它们就没有任何意义.

实际上,在这种情况下,你EmployeeBal将完全等同于System.Math,并且它的所有方法都是"辅助方法"(如果这就是你想要的那些).在这种情况下,忘记静态方法一分钟:你的整个类应该是static(static class EmployeeBal),它不应该有任何构造函数; 因为类型对象的概念EmployeeBal根本没有意义.事实上,在其他语言中EmployeeBal根本就不是一个阶级; 相反,它通常被称为模块:逻辑上对代码进行分组的单元.C#没有模块,所有代码都必须驻留在类中.因此,类实现了双重目的:它们对代码进行分组,并生成对象.1

现在考虑一个不太极端的情况:EmployeeBal对象实际上保持状态,并且不同.然而GetAllEmployees(),无论哪个对象调用该方法,仍然会产生相同的结果.

在这种情况下,EmployeeBal显然不能是静态类.但GetAllEmployees仍然是无国籍的,因此不属于类型的对象EmployeeBal.因此该方法应该是静态的.


1这两个根本不同的概念(模块)之间缺乏区别实际上非常烦人,而C#这种行为的主要原因是因为它被认为与Java类似.事后看来这是一个错误,但不是一个严重的错误.

  • @Learning你有很多好的答案......只要用你的大脑来休息...... (2认同)