假设我有一个用于执行单个功能的类.执行该功能后,可以将其销毁.有没有理由更喜欢这些方法之一?
// Initialize arguments in constructor
MyClass myObject = new MyClass(arg1, arg2, arg3);
myObject.myMethod();
// Pass arguments to method
MyClass myObject = new MyClass();
myObject.myMethod(arg1, arg2, arg3);
// Pass arguments to static method
MyClass.myMethod(arg1, arg2, arg3);
Run Code Online (Sandbox Code Playgroud)
我故意对细节模糊不清,试图获得针对不同情况的指导方针.但我并没有考虑像Math.random()这样的简单库函数.我正在考虑更多执行某些特定复杂任务的类,但只需要一个(公共)方法来执行它.
在C#中有什么区别:
public static class ClassName {}
Run Code Online (Sandbox Code Playgroud)
和:
public class ClassName {}
Run Code Online (Sandbox Code Playgroud) 假设我有一个这样的类:
public class Car {
private double distanceDriven;
public void drive(double miles){
distanceDriven += miles;
}
public void driveInCanada(double kilometer){
distanceDriven += convertToMiles(kilometer);
}
private double convertToMiles(double km){
return km*0.621371192;
}
}
Run Code Online (Sandbox Code Playgroud)
你可以看到convertToMiles
:
它应该被声明为静态吗?这根本不会改变函数的功能(见上文).我认为它可能会影响:
该convertToMiles
功能应该是这样的:
private double convertToMiles(double km){
Run Code Online (Sandbox Code Playgroud)
要么
private static double convertToMiles(double km){
Run Code Online (Sandbox Code Playgroud) 在C#中,标记类静态的目的是什么?
如果我有一个只有静态方法的类,我可以将该类标记为静态.为什么我要将类标记为静态?如果所有方法都是静态的,并且我打算永远不会添加非静态方法,我是否不想将类标记为静态?
我环顾四周,看到了一些类似的问题,但没有一个像这样.
我对静态类和静态方法有疑问.从MSDN我理解"静态类和类成员用于创建可以在不创建类实例的情况下访问的数据和函数."
因此,如果我们不想将一个类与一个实例相关联,我们将把它作为静态.这是唯一的优势吗?任何人都可以指导我在静态类的实时场景.
类中的一些时间(不是静态的)我发现了静态方法.静态方法在实际中为实例提供了多少优势/性能优势.
我在ASP.NET应用程序(使用Entity Framework)中使用MVC模式的方式如下:
1)我的Models
文件夹包含所有EF实体以及我的ViewModel
2)我有一个Helpers
文件夹,我存储为特定应用程序创建的类.
3)在我的Helpers
文件夹中,我有一个名为的静态类MyHelper
,其中包含使用EF访问数据库的方法.
namespace myApp.Helpers
{
public static class MyHelper
{
public static async Task<ProductVM> GetProductAsync(int productId)
{
using (var context = new myEntities())
{
return await context.vwxProducts.Where(x => x.ProductId == productId).Select(x => new ProductVM { A = x.A, B = x.B }).FirstOrDefaultAsync();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
4)我的控制器然后在必要时调用这些函数:
namespace myApp.Controllers
{
public class ProductController : Controller
{
[HttpGet]
public async Task<ActionResult> Index(int productId)
{
var productVM = await MyHelper.GetProductAsync(productId);
return …
Run Code Online (Sandbox Code Playgroud) 我有一个普遍的问题......我什么时候应该使用静态类或静态方法?我知道可以在不实例化的情况下调用静态方法的想法......静态类只应该用于静态方法吗?...但是它是否还存在任何性能问题...什么时候它们应该优先于实例方法和类?如果有人可以简单地提及我何时应该选择使用它们以及何时应该避免使用它们?
可能重复:
何时在C#中使用静态类
我将编写代码,其中我需要只保存方法的类.我认为让类静态是个好主意.一些高级程序员认为不要使用静态类.我没有找到任何理由不使用静态类的理由.有人可以用C#语言知道使用静态类有什么害处.静态类使用是否需要比创建类的对象更多的内存?我会清楚我的班级没有单一领域,因此也没有财产.
有关详细信息,我还将解释代码.
我们有产品需要对图表设置进行XML处理.我们从类库中的XML文件中读取对象,该类保存与图表相关的属性.现在我有两个Layers,第一个是产品第二类库和XML相关的操作.实际上,高级程序员需要独立的类来读写XML.我让这个类静态.
在另一种情况下,我有chartData类.在那个类我想要的方法,比如Line of Axis,图表系列是否有效.此外,图表的颜色是否以ARGB格式或纯色名称存储.他们不希望这些方法在同一个项目中.现在我可以使类静态或创建对象.
可能重复:
何时在C#中使用静态类
有人可以提供指南,关于何时创建静态类的标准检查点以及何时创建实例类.
基本上我在编写代码时看到的很多次,使用静态类和方法可以完成同样的事情,并且我对许多事情感到困惑.
到目前为止,我知道以下检查点:
如果考虑对象只能在整个应用程序中存在一次,那么它将处于"静态"状态
如果方法不在其中使用任何字段变量,那么它可以是静态方法.
c# ×8
static ×4
oop ×3
.net ×2
java ×2
asp.net-mvc ×1
c#-4.0 ×1
class ×1
class-design ×1
coding-style ×1
instance ×1