c#里为啥有的使用时函数需要new一个对象而有的不用?为啥不直接调用就好?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#里为啥有的使用时函数需要new一个对象而有的不用?为啥不直接调用就好?相关的知识,希望对你有一定的参考价值。

类的成员函数如果不是静态的(也就是没有static修饰符)在调用的时候是要先new一个该类的对象才能调用它,而如果是静态的就不需要,直接可以用类名调用追问

嗯。为什么不直接使用静态的呢?非要去new下才可以用?有什么好处吗?

追答

静态的成员属于该类所有对象所共有,是不会变化的,比如定义一个Person类,要输出一个人的身高和体重,这种情况就不能声明这个方法为静态的,因为人与人的身高和体重都是有差异的,再定义一个吃的方法,这时你可以定义成静态的,因为所有的人都是粮食的。

参考技术A 要使用某些类的实例方法,就需要先创建类的一个对象(new),然后才能调用这个对象的方法(也就是面向过程语言中的函数)
除了实例方法外,还可以调用类的静态方法(也就是static方法),在调用静态方法时,你不需要创建一个对象,只需要用类名调用就可以了。

例如
class sample

static void func1()


void func2()




调用func1:
sample.func1();
调用func2:
sample s = new sample();
s.func2();

区别呢,在于静态方法不能访问实例方法和属性。

为什么不直接使用静态的呢?非要去new下才可以用?有什么好处吗?
没什么好处,但这就是面向对象,要调用实例方法就要先new一个实例对象。
至于为什么不直接使用静态方法……是因为有地方会需要用到“对象”

至于为什么需要用到“对象”……这就是面向对象语言出现的原因了
面向对象语言很好很强大,很方便很简单,还能封装继承多态……
总之不用纠结于概念,多用一下C#就清楚了
参考技术B new一个?什么意思?函数声明吗?

C# new 后 得到的却是一个空的对象

是的 new只是一个新对象 如果你给了有参构造函数并且在函数里赋值了 那样它才不是空的对象
总而言之 无论如何 new出来就是空的 不管你以什么方式 都必须去赋值
参考技术A 这个主要是要看这个类的构造函数是什么样子了,new其实就是执行构造函数的过程,如果构造函数里给某些属性赋值了,那么这些对象就会有默认值,如果没有 那么这些对象会是各自对应的数据类型的默认值,如int类型,如果构造函数里面,没有赋值,他的默认值是0,string类型就是"" 参考技术B 是滴,得到的当然是空对象。需要你赋值追问

ManagerPlay aa = new ManagerPlay();
// aa.name;
Debug.Log(aa);
这个有问题么? 却是null需要Manager类么?

追答

需要啊
class Manager
String name;
public String getName()
return name;

public void setName(String name)
name = "快乐的JB毛 ";
this.name = name;

来自:求助得到的回答
参考技术B 你继承了什么东西吧 比如unity3d里继承MonoBehaviour就会new 出空

以上是关于c#里为啥有的使用时函数需要new一个对象而有的不用?为啥不直接调用就好?的主要内容,如果未能解决你的问题,请参考以下文章

为啥有的dll里没有导出函数?

请问java里面为啥有时候声明对象的时候不用new??

PHP工厂模式

█c# 为啥有的dll不能直接引用,必须regsvr32 注册后 才能引用?

类方法详解

多态基础