博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类不需要实例化也能直接用
阅读量:2240 次
发布时间:2019-05-09

本文共 2099 字,大约阅读时间需要 6 分钟。

文章目录

  在我以前的意识中,我们需要用到某个类的时候,需要先实例化这个类,实例化出一个对象,然后在使用这个类里面的方法和属性,今天偶然的机会了解到,原来有些类是不需要实例化就可以直接用的——静态(static)类,同时我们可以直接使用静态类中的方法和属性。
  类、字段、属性、方法等只要是被static修饰后,变为静态类、静态字段、静态属性、静态方法,此时,在其他的类中可以直接调用这些字段,属性,方法等。

基本知识:

static修饰的类成为静态类,静态类中只能包含静态成员(被static修饰的字段、属性、方法),不能被实例化,不能被继承;非静态中可以包含静态成员。

演示:

下面我通过实例来掩饰一下:

首先需要建立一个C#控制台项目。(新建过程省略)

1、需要被实例化的类

如果被调用成员为非静态成员,那么它所属的类一定是非静态类。

namespace _1_被调用时必须先实例化的情况{
class Program {
static void Main(string[] args) {
ClassA a = new ClassA(); a.test();//如果不先实例化classA,无法调用test方法。 } }}

被调用的非静态类。

using System;namespace _1_被调用时必须先实例化的情况{
public class ClassA {
public void test() {
Console.WriteLine("我是非静态类ClassA中的方法test。"); Console.ReadKey(); } }}

解释:ClassA类为非静态类,其中的方法test()也为非静态方法,所以在main函数中调用时需要先实例化ClassA类。

2、不需要实例化的情况

1)被调用的成员为非静态类

namespace _2_被调用时不需要实例化的情况_被调用类为非静态类{
class Program {
static void Main(string[] args) {
ClassB.test(); } }}

调用非静态类中的静态方法

using System;namespace _2_被调用时不需要实例化的情况_被调用类为非静态类{
public class ClassB {
public static void test() {
Console.WriteLine("我是非静态类ClassB中的方法test。"); Console.ReadKey(); } }}

ClassB类为非静态类,但其中的方法test()为非静态方法,所以在mian函数中调用时不实例化ClassB类(而且不能实例化),直接调用其成员,语法为“类名.成员”。

2)被调用类为静态类

namespace _3_被调用时不需要实例化的情况_被调用类为静态类{
class Program {
static void Main(string[] args) {
ClassC.test(); } }}

调用静态类中的静态方法

using System;namespace _3_被调用时不需要实例化的情况_被调用类为静态类{
public static class ClassC {
public static void test() {
Console.WriteLine("我是非静态类ClassC中的方法test。"); Console.ReadKey(); } }}

ClassC类为静态类,其中的方法也test()为非静态方法,所以在main函数中调用时不实例化classC类(而且不能实例化),直接调用其成员,语法为“类名.成员”。

原因

static修饰的对象具有以下特点:

1.全局唯一,任何一次的修改都是全局性的影响
2.只加载一次,优先于非静态
3.使用方式上不依赖于实例对象。

static 关键字的作用就是把类的成员变成类的相关,而不是实例相关,也就是说static修饰的成员是属于整个类的,而不是属于某个具体的对象。既然是全局唯一,那么就没有必要在去实例化后再用了。

转载地址:http://cthbb.baihongyu.com/

你可能感兴趣的文章
DB理论--数据存储方式
查看>>
PB协议的说明与使用
查看>>
什么是TPS,什么是QPS,区别是什么?
查看>>
git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
查看>>
logback中additivity的理解
查看>>
ThreadLocal 那点事儿(续集)
查看>>
阳台做成榻榻米 阳台做成书房
查看>>
深入分析java线程池的实现原理
查看>>
mybatis中"#"和"$"的区别
查看>>
Hibernate与MyBatis区别
查看>>
如何禁用Eclipse的Validating
查看>>
据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?
查看>>
SpringMVC学习笔记2
查看>>
Oracle知识点连载(一)
查看>>
Oracle知识点连载(二)
查看>>
Oracle知识点连载(三)
查看>>
Oracle知识点连载(五)
查看>>
关于三元运算符的类型转换问题
查看>>
笔记本怎么设置WIfi热点
查看>>
如何实现字符串的反转及替换?
查看>>