静态、非静态
先来看一段代码来区分静态与非静态:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
静态和非静态的区别
{
/**
* 非静态类
* 既可以定义静态字段、静态属性、静态方法。
* 也可以定义非静态(实例成员)字段、非静态(实例成员)属性、非静态(实例成员)静态方法。
**/
//非静态类
public
class
Person1
{
//实例成员(非静态)
private
int
_id;
//实例属性(非静态)
public
int
ID
{
get
{
return
_id; }
set
{ _id = value; }
}
//实例方法(非静态)
public
void
Showinfo()
{
}
/*--------------------------------------------------------------------*/
//静态字段
private
static
string
_name;
//静态属性
public
static
string
Name
{
get
{
return
_name;
}
set
{
_name = value;
}
}
//静态方法
public
static
void
Sho()
{
}
}
}
|
可以看出静态与非静态的区别在于 关键字 : static
静态和非静态的区别:
1)、在非静态类中,既可以有实例成员,也可以有静态成员。
2)、在调用实例成员的时候,需要使用对象名.实例成员;
在调用静态成员的时候,需要使用类名.静态成员名;
3)、非静态类中:既可以定义静态字段、静态属性、静态方法,也可以定义非静态(实例成员)字段、非静态(实例成员)属性、非静态(实例成员)方法。
现在来看一个静态与非静态的小案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
static
void
Main(
string
[] args)
{
//调用实例成员
Person p =
new
Person();
//非静态方法
p.M1();
//静态方法
Person.M2();
Console.WriteLine();
Console.ReadKey();
}
public
class
Person
{
private
static
string
_name;
public
static
string
Name
{
get
{
return
Person._name; }
set
{ Person._name = value; }
}
private
char
_gender;
public
char
Gender
{
get
{
return
_gender; }
set
{ _gender = value; }
}
public
void
M1()
{
Console.WriteLine(
"我是非静态的方法"
);
}
public
static
void
M2()
{
Console.WriteLine(
"我是一个静态方法"
);
}
}
|
运行结果:
总结:
静态成员必须使用类名去调用,而实例成员使用对象名调用。
静态函数中,只能访问静态成员,不允许访问实例成员。
实例函数中,既可以使用静态成员,也可以使用实例成员。
静态类中只允许有静态成员,不允许出现实例成员。
使用:
1)、如果你想要你的类当做一个"工具类"去使用,这个时候可以考虑将类写成静态的。
2)、静态类在整个项目中资源共享。只有在程序全部结束之后,静态类才会释放资源。