日期:2014-05-18  浏览次数:20901 次

对象和实例的困惑 waiting
对象和实例的理解一直是我困扰的问题,网上的说明和教科书上的说明都很抽象,我不能完全理理解他们区别。
1。对象是类的一个实例,的确没错,但是什么时候需要实例,什么时候却不需要,我无法确认。
比如有些类中封装的方法必须需要靠new个实例才能去使用类中的方法,否则即使能用类访问到静态方法我使用了也会报错?
疑惑是类既然能访问其中的静态方法,为什么不能拿来用,而必须要new个实例,那么这个静态方法又有什么用呢?
2。有些类却无需创建实例,直接定义就可以使用,也不报错。我如何知道这个类必须实例能用还是不需要实例就可以用?
以上的这些问题,是不是跟是否有指针的指向有关呢?
请大虾们能用通俗的话讲解下或者内部的机制如何操作的。


------解决方案--------------------
1.实例怎么访问静态方法,直接用类访问就行了,实例可以访问非静态的东东
2.什么叫直接定义就能用?一般有些类封装了静态类和方法如System.Console本身就是一个静态的类,其里面都是静态的方法和属性,当然直接那过来就能用了

总之,静态的东西相当于全局定义好的,直接就能用了,并不用要什么初始化实例之类的
------解决方案--------------------
public class C
{
public void a()
{
}
public static void b()
{
}
}

我很菜的写程序,一般没有复杂操作的都写成静态的(类似于面向过程时的函数),需要对特定对象操作的就写成非静态的.

C c1=new C();
c1.a();

C.b();


------解决方案--------------------
探讨
引用:
1.实例怎么访问静态方法,直接用类访问就行了,实例可以访问非静态的东东

我没说实例可以去访问静态方法。。。 我说用类访问静态方法!
意思就是有些类直接用类的对象,这个对象还没实例化,对象去访问方法会出错的,
比如数据库连接的SqlConnection类的对象必须实例化,否则直接调用open方法会出错的!

------解决方案--------------------
类就是模板,而实例就像通过模板生成出来的东西。
静态方法是放在栈里的函数指针,就像是C里的全局函数,只不过是在一个Namespace下的。
------解决方案--------------------
怎么咬这种文字游戏啊???

对象是一个抽象范畴,比如“人”是一个对象。
而实例是一个具体东西,比如“男人”,“女人”都属于“人”的实例。。。
------解决方案--------------------
这是一个世界观与方法论的问题。
程序需要对现实世界进行描述,所以产生了类,对象这些概念。
你做简单的程序就暂时不要考虑这些了,等稍微复杂一点的时候,再想吧。现在估计你是想不明白的。
楼上的回答中有人懂,但是说不清楚,也有人自己也是糊涂的跑来乱说一气,你只会更糊涂。
先写个10w行代码,再来考虑这些好了。
------解决方案--------------------
静态就直接用"类名.静态方法名"访问,和类的实例没有关系了

非静态的public方法就必须使用"实例对象.方法名"访问

对象和实例其实是一个概念,指得是一个东西都是new出来的那个东西
------解决方案--------------------
C# code

    class A
    {
        public string s1 = "123";

        public static string s2 = "456";

        public void doSome()
        { }
        public static void doMore()
        { }
    }

------解决方案--------------------
对象和实例的理解一直是我困扰的问题,网上的说明和教科书上的说明都很抽象,我不能完全理理解他们区别。 
1。对象是类的一个实例,的确没错,但是什么时候需要实例,什么时候却不需要,我无法确认。 
比如有些类中封装的方法必须需要靠new个实例才能去使用类中的方法,否则即使能用类访问到静态方法我使用了也会报错? 
疑惑是类既然能访问其中的静态方法,为什么不能拿来用,而必须要new个实例,那么这个静态方法又有什么用呢? 

不用实例化的:
静态方法是为类提供的公共方法,也就是这个方法对所有属于这个类的对象适用。
例如,假设为男人定义一个类,该类有个方法用来查询男人是否有小鸡鸡,那么从现阶段的生物进化来看,男人都是有小鸡鸡的。
也就是不必具体到某个男人,就知道他有小鸡鸡。所以这个方法应定义为静态方法,因为是对所有男人适用的。

要实例化的:
每个人都有身高体重,当你要查询人的体重时,你肯定先要指定是那个人的体重。这个过程就是相当于实例化,具体到了个人。
你不实例化,也就是不指定是那个人。那么你要查谁的体重?
===============
2。有些类却无需创建实例,直接定义就可以使用,也不报错。我如何知道这个类必须实例能用还是不需要实例就可以用? 
以上的这些问题,是不是跟是否有指针的指向有关呢? 
请大虾们能用通俗的话讲解下或者内部的机制如何操作的。

有些类却无需创建实例,直接定义就可以使用。这种类型往往是面向公众的,如政府机构,提供了一系列的服务。这些服务每个人都是适用的. 所以这个可以是静态的。
我如何知道这个类必须实例能用还是不需要实例就可以用? 这个和问题域有关,如前面所说,当你是研究男人有没有小鸡鸡时,这个不用实例化就能查询到。
当你要查询体重时,就要具体到某个人,就是要实例化。
------解决方案--------------------
C#中 如果对象不实例化!会出现 使用对象为引用的现象!

实例化 就像是 

定义 List<T> list; //我自己说自己是一个List<T>但是 程序不知道!
实例化 list=new List<T>;//程序知道我是一个List<T>了 

这是我对c#中的实例化理解 不知道对你有没有帮助
------解决方案--------------------
所有的东东都是
对象(object)
包括对象的实例(instance)
------解决方案--------------------