我知道有一些帖子,但我没有找到我正在寻找的答案,而且很简单。
我知道调用方法是否静态(instanciation(OOP))。
示例,使用static:
using System;
namespace Projet_Test
{
class surfacesCalcul
{
public static int calc_air(int a, int b){
int result = a * b;
return result;
}
}
/*
* ##########################
* ##########################
*/
class MainClass
{
public static void Main (string[] args)
{
Console.WriteLine(surfacesCalcul.calc_air(4,5));
}
}
}
你调用类(surfacesCalcul).Method,你可以访问方法。
-
正常,使用OOP:
using System;
namespace Projet_Test
{
class surfacesCalcul
{
public int calc_air(int a, int b){
int result = a * b;
return result;
}
}
/*
* ##########################
* ##########################
*/
class MainClass
{
public static void Main (string[] args)
{
surfacesCalcul calculMeThis = new surfacesCalcul();
Console.WriteLine(calculMeThis.calc_air(4,5));
}
}
}
您创建一个实例化,然后您可以访问该类中的方法。
-
[我的问题] 哪一个是最好的,我只是想知道为什么使用静态方法而不是实例或反向。是真的有原因还是两者都很好。是否有最好的时间使用另一个?
答案 0 :(得分:3)
我会争辩双方,你可以选择。
考虑使用静态函数的第一个示例:
namespace Projet_Test
{
class surfacesCalcul
{
public static int calc_air(int a, int b){
int result = a * b;
return result;
}
}
/*
* ##########################
* ##########################
*/
class MainClass
{
public static void Main (string[] args)
{
Console.WriteLine(surfacesCalcul.calc_air(4,5));
}
}
}
如果您从不关心覆盖或任何类型的继承,那么这很好。
现在考虑这个例子:
class surfacesCalcul
{
public virtual int calc_air(int a, int b){
int result = a * b;
return result;
}
}
class surfacesCalcul2 : surfacesCalcul {
public override int calc_air(int a, int b)
{
var g = base.calc_air(a, b);
return g*2;
}
}
/*
* ##########################
* ##########################
*/
class MainClass
{
public static void Main (string[] args)
{
var calculMeThis = new surfacesCalcul2();
Console.WriteLine(calculMeThis.calc_air(4,5));
}
}
你没有改变"正确性"该程序根本只允许多态性来做它的事情。
这个例子真的很重要,真的很重要。我更喜欢带有类的路径,因为静态方法不能有实例变量,你不能进行任何类型的依赖注入,这使得单元测试变得更加容易。对象实例化还允许不同的实例包含不同的状态信息,其中静态不能包含任何特定于实例的数据。