> 信息中心 >

静态方法中实例化的对象问题

来源:互联网 编辑:吕秀秀

有网友碰到过这样的问题:静态方法中实例化的对象问题,问题详细内容为:

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
User user =null;
user.ToHelloWorld ();
if (user == null)
{
Console.Write("world");
Console.Read();
}
else
{
Console.Write(user.UserName);
Console.Read();
}

} catch { Console.Write("hello world"); Console.Read(); } } } public class User { public string UserId { get; set; } public string UserName { get; set; } } public static class UserExtention { public static void ToHelloWorld(this User user) { if (user == null) { user = new User() { UserName = "hello" }; } } }

}

这段代码的输出结果为WORLD。调试发现在执行完 user.ToHelloWorld ();后User还是为NULL。请问大神们这是为什么?

C# ,我搜你通过互联网收集了相关的一些解决方案,希望对有过相同或者相似问题的网友提供帮助,具体如下:

解决方案1:
User user =null; 和 静态类下的扩展 是2个不同的对象 收获园豆:5
解决方案2:
User user =null;
user.ToHelloWorld (); 一个为null的user对象。对于null对象,你是无法操作其属性的。 初始化对象的时候不建议初始化为null。 User user =null; 改为  User user = new User { UserId="XXX",UserName="XXX"};
解决方案3:
静态类的扩展方法是一个语法糖,
user.ToHelloWorld ()其实就是UserExtention.ToHelloWorld (user);
如果了解参数的传递,你就知道方法里的User user只是一个副本。
除非用ref修饰参数,不过用this修改的参数不能用ref修饰

为什么静态方法不用被实例化

答:静态变量 在java也叫类变量从名字可以看出它是属于某个类的而不是类的实例。它的关键字是static存储在静态存储区,当程序执行,类的代码被加载到内存,类的静态变量就分配了内存空间,他是属于类的也就是没个实例对象都是对于以个静态变量,静态...

Java中可以直接调用类中静态方法,不用实例化么,...

答:好吧,我来试试看,看答案能不能够让你满意。 先通俗的分析下,我们把类看作是一个房子。房子里面有家具,桌椅板凳之类的,房子里面还有人。 房子里面所有的人都应该是共有一套家具的。也就是说,这些家具是唯一的,如果某个家具坏了,那么大家...

静态方法和实例化方法的区别

答:静态方法的调用,是类名后直接加静态方法即可。实例方法必须将类实例化后,用实例调用该实例方法。 静态方法,只能调用类中的其他静态属性和静态方法,不能调用类中的非静态属性和非静态方法。 实例方法,可以调用静态属性和静态方法,也可以调...

java中静态方法为什么不用实例化

答:静态方法,静态类都是直接就在程序运行的时候就加载了。实例化是我们在需要使用某个方法的时候才去实例化类,再调用方法

main方法是静态方法,为什么能直接实例化对象

答:静态方法是类具有的,调用的时候不需要new对象,只需要“类名.方法名”就可以了。静态方法一个类只保留一份。静态方法在内存里存放在栈中。 普通方法,在new对象的时候才被分配内存,存放在堆中。 栈和堆是内存的两个区域。 举例: 类A有静态方法m...

JAVA静态函数实例化问题。

答:问题1:只有第一次的时候会调用实例化,因为你有if (instance == null) 的判断,而instance又是一个静态变量。或者其他地方有释放的时候,再运行过这个函数也会再实例化一次。 问题2:用static声明的方法是静态方法,在调用该方法时,不会将对象...

java中静态类能否实例化

答:静态类,一般使用在某个类的内容,简称静态内部类。 静态Static又有全局的意思,对于一般的public定义的外部类,没有必要static关键词,因为可以直接导入包得到该类的引用(只是在访问其非静态成员时需要实例化它); 而在一个类内部定义另一个...

.net static 方法中实例化的对象,方法执行完后会...

答:程序中的其他类共用次static对象,比如static int a=0;然后一个类中修改 静态类名.a++;然后另一个类中再次调用静态类名.a的话,值就是1,再a++就是2

JAVA中实例化是为了方法可以给一个对象用,那为什...

答:静态方法是类具有的,调用的时候不需要new对象,只需要“类名.方法名”就可以了。静态方法一个类只保留一份。静态方法在内存里存放在栈中。 普通方法,在new对象的时候才被分配内存,存放在堆中。 栈和堆是内存的两个区域。 举例: 类A有静态方法m...

PHP手册说静态属性不能通过一个类已实例化的对象来...

答:我想手册上说的是用这种方式来访问: print $foo->$my_static 他这里说的静态方法访问是指:: 翻译有歧义的时候你可以看看英文版。

Java中可以直接调用类中静态方法,不用实例化么,详解!原理

而每new一个类的对象,系统就会重新在 堆内存中开辟一个新空间来存放该类的实例对... 静态方法只中不能调用非静态方法。因为被static修饰的方法会首先被Classloader对象...

link中静态方法不需要实例化对象,所以效率要比实例对象要高,这...

静态方法不能访问非静态的成员,这是一个弊端,而且就算有性能上的差别,也可以忽略不计。

静态方法,不要实例化对象怎么使用方法?

你类的名字.方法名. 但是静态方法虽然简单, 调用不需要实例化, 但是不要乱用,,因为很消耗内存

非静态内部类为何不能直接在静态类中实例化?通过外部类返回...

中实例化? 你里面的实例化是指作在哪里实例化? 为静态类的属性?private XXXX ? 静态类没有属性! 如果你的实例化指的是在静态类的静态方法中实例化,肯定可以! --...

main方法是静态方法,为什么能直接实例化对象

静态方法是类具有的,调用的时候不需要new对象,只需要“类名.方法名”就可以了。静态方法一个类只保留一份。静态方法在内存里存放在栈中。 普通方法,在new对象的时候才...

JAVA中实例化是为了方法可以给一个对象用,那为什么静态的方...

类A有静态方法mA,方法cA。 分别new A的对象 A1 和 A2 这时候内存中只存在一个方法mA,存在两个方法 cA,这两个方法一个是A1对象的一个是A2对象的。 调用mA方法 ...

循环调用静态方法 和 先实例化一个对象 在循环调用对象的方法...

你是想实现个什么东东?

c#静态方法中为什么可以调用非静态的构造函数?比如实例化对...

为什么不可以调用?静态方法不过是一段程序而已,所有的程序的入口都必须是静态的,不然无法运行,静态的程序不能调实例化方法,那跟C还有什么区别。 讲白了方法什么的其...

C# 静态方法既然不能调用非静态属性 为何实例化又可以呢 如...

方法上下文才会出现的,你可能没理解那句话的意思,静态方法不能调用实例方法是因为静态方法不存在this变量,所以不能掉包围类的实例方法,但是不是说不能调用任何实例对象...

php 在什么情况下 ,只能实例化对象调用类方法,不能用静态stat...

类中没有静态方法就必须实例化1234567891011<?<a href="https://www.baidu.com/s?wd=php&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00...


请注意,本站信息均收集自互联网,相关信息仅供参考,医疗等重要信息请以正规途径为最终意见,本站不承担任何责任!

www.wosoni.com false 互联网 http://www.wosoni.com/blogcnk/mm/ccdeik.html report 5169 解决方案1:User user =null; 和 静态类下的扩展 是2个不同的对象收获园豆:5解决方案2:User user =null; user.ToHelloWorld ();一个为null的user对象。对于null对象,你是无法操作其属性的。初始化对象的时候不建议初始化为null。User user =null; 改为  User user = new User { UserId="XXX",UserName="XXX"};解决方案3:静

热门图片