什么是实例方法?
实例方法相对于静态方法(或者叫类方法)而言,它就是没有 static 前缀的一类一般方法,被对象拥有(这也是称之为“实例”方法的原因)。
特点是定义的时候前面没有 static 前缀,本类中直接调用的时候必须也在实例方法内,否则调用前必须先实例出一个对象
延伸阅读
实例方法可以操作类变量,类方法可以操作实际变量吗?为什么?
类方法当然不可以操作实例变量了。
因为实例变量在类实例化以后才能用,而类方法在类实例化时就已经可以用了,这时实例变量还不存在,所以会报错的。
C#中静态方法实例方法?
1.静态变量
在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用。但有些时候,这样做却不是个明智的选择。
假设我们要定义一个图书类,要求该类能保存图书的数量,即每增加一本图书(定义一个实例),图书的数量应该加1。如果没有静态变量,我们需要将图书的数量保存在每本图书(实例)里,然而,这样的变量要在不同图书(实例)里重复存储,图书(实例)数量少的话,我们还能接受,如果图书(实例)数量较多的话,比如成千上万,我们无法想象这要造成多少资源(如内存、磁盘空间)的浪费,更让人无法忍受的是:因为图书(实例)的数量要保存在每本图书(实例)里,该值肯定是不同的。要使这些图书(实例)中保存的图书(实例)数量一致,我们必须在每增加一本新书(生成一个新实例)时,修改其他所有图书(实例)中保存的该值。Oh,My God!你会重新向往面向过程的程序设计方法,向往拥有全局变量的时代。但,这种局面不会出现,因为C#中为你准备好了另外一种变量类型:静态变量。它在类中类似全局变量,保存类的公共信息,所有该类的实例(对象)共享该值。
静态变量的声明方式如下:
[访问修饰符] static 数据类型 变量名;
这里的访问修饰符跟类的其它成员一样,可以是public,protected,private或internal等。
静态变量又如何使用呢?
静态变量必须使用类名来引用,而不能使用类的实例,因为,静态变量不属于任何实例,而是共有的。我们可以打个比方:在一个班级中,有些物品是个人的,我们想使用时,必须指出物品的所有者,比如说“王三的自行车”,在C#程序中我们可以使用:王三.自行车的格式。有些物品是大家共有的物品,不能以个人名义使用,而是用班级的名义使用,比如班集体出资买的篮球,只能说:“班级的篮球”,而不能说:“王三的篮球”。这绝对是不行的,这对其他人绝对是不公平的,我们可以联想到许多贪官污吏就是使用了不属于自己的东西,或以个人名义使用公家的东西而葬送了自己。
说一句有用的就是:静态变量是用类名来引用它。即:类名.静态变量名;
举个具体的例子如下:
using System;
class StaticVar
{
public int x;
public static int y;
public void PrintInfo()
{
Console.WriteLine(“非静态变量x={0}”,x);
Console.WriteLine(“静态变量y = {0}”,y);
}
}
class Test
{
static void Main(string[] args)
{
StaticVar stv = new StaticVar();
stv.x
= 10;
//
stv.y
= 20; //error;无法使用实例引用访问静态成员“
StaticVar.y
”;改用类型名来限定它
StaticVar.y
= 20;
stv.PrintInfo();
}
}
程序中被注释的部分:
stv.y
= 20是使用实例引用静态变量,这将引发错误。
另外,我想说一句,对于静态变量在声明时,如果没有给出初始值或使用前没有赋任何值的话,系统会给他们一个默认值:对于整型数据默认值为0;单精度数据为:0.0f;双精度数据为0.0;布尔型数据为False;引用型数据为null。
2.静态方法
静态方法与静态变量一样,不属于任何特定的实例,属于类全体成员共有,由类名来调用。但要注意以下几点:
静态方法只能访问类的,不能访问类的非;
非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
静态方法不能使用实例来调用,只能使用类名来调用。这里用一个具体的例子来说明:
using System;
namespace TestStatic
{
class StaticTest
{
int x;
static int y;
public StaticTest(int a,int b)
{
x = a;
y = b;
}
public void SimplePrint()
{
Console.WriteLine(“x=”+x+”,y=”+y);
}
public static void StaticPrint()
{
Console.WriteLine(“y={0}”,y);
// Console.WriteLine(“x={0}”,x); //静态方法中不能使用非静态成员
}
}
class Test
{
static void Main(string[] args)
{
StaticTest st = new StaticTest(10,23);
st.SimplePrint();
//st.StaticPrint(); //静态方法不能使用实例来调用
StaticTest.StaticPrint();
}
}
}
static方法中如何访问实例方法?
先建立一个实例对象,然后通过静态方法访问该实例方法是可行的。
类中的实例方法可以操作类变量吗?类方法可以操作实例变量吗?
1.类中的实例方法可以操作类变量 因为类总是先于实例存在的 实例只是类在特定状态下的一个特定对象 所以必须类存在 才能从类创建实例 所以实例方法可以操作类变量 因为类变量肯定存在 2.类方法不可以操作实例变量 因为类方法的作用域在类上 类本身并不知道自己被创建了多少实例 这些实例哪些还存在 所以类方法没有办法访问到实例变量
实例方法可以访问实例变量和类变量吗?
1.类中的实例方法可以操作类变量因为类总是先于实例存在的实例只是类在特定状态下的一个特定对象所以必须类存在才能从类创建实例所以实例方法可以操作类变量因为类变量肯定存在2.类方法不可以操作实例变量因为类方法的作用域在类上类本身并不知道自己被创建了多少实例这些实例哪些还存在所以类方法没有办法访问到实例变量
python构造方法与实例方法有什么不同?
1.python的构造方法是用于创建类的,一般由init方法和new方法构成,一个用于初始化数据,一个用于在内存中开辟空间
2.实例方法是指类的实例,即创建类对象后,通过·调用,实例方法主要是完成某件事儿
例子和方法有什么区别?
例子指的是一个事例,例子既可以是真实存在的,也可以是按照逻辑虚构出来的。例子是说明一个理论的佐证或者辅证。例子一般来讲都是生活中的实例,也可能是虚构的。方法指的是如何操作的行为,也就是做事的方式和手段,做一件事可能会有多种方法,一般都会采取最优的方法来做。
类方法和实例方法区别是什么?
类方法和实例方法区别如下:
1、在类方法中不能调用实例方法,只能访问和自己一样的类方法,但实例方法可以访问类方法和实例方法。
2、在类方法中不能引用实例变量(用static修饰的变量),但实例方法可以引用成员变量和实例变量。
3、在类方法中不能使用super、this关键字。
4、类方法不能被覆盖,但实例方法可以被覆盖。
5、类方法的调用是:类名.类方法,而实例方法的调用必须new出一个对象,即:对象.实例方法。