C#静态类与非静态类

1、静态类

静态类有几个重要的特点:

1)无法实例化:由于静态类不能被实例化,因此它不会占用对象内存。

2)静态成员:静态类只能包含静态成员(静态方法、静态属性、静态事件等)。

3)全局访问点:静态类可以作为全局访问点,提供对一组静态方法的访问。

4)无法继承:静态类不能被继承。由于它们不能被实例化,所以继承它们没有意义。

静态类使用关键字static 修饰,它的成员也要使用static 修饰,如下代码:

//自定义一个静态类

csharp 复制代码
static class StaticClass
{
    public static string Name { get; set; } = "小王";
    public static int Add(int a, int b)
    {
        return a + b;
    }

    public static int Multiply(int a, int b)
    {
        return a * b;
    }
}

调用:

csharp 复制代码
 int a = StaticClass.Add(10, 20);
            int b = StaticClass.Multiply(2, 4);
            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.WriteLine(StaticClass.Name );

输出:

csharp 复制代码
30
8
小王

上面的代码中Add方法是一个静态方法,使用类名.方法名 这样的方式去调用,Name 是一个静态属性,使用类名.属性名这样的方式去调用。

2、非静态类(使用的比较多)

1)可以实例化:你可以使用 new 关键字来创建非静态类的对象。

2)实例成员:非静态类可以包含实例成员(实例方法、实例属性、实例事件等),这些成员属于类的每个实例。

3)继承:非静态类可以被其他类继承,实现代码的重用和扩展。

这个非静态类也是一个引用类型,参考代码如下:

csharp 复制代码
  class NotStaticClass
    {
        public string Name { get; set; } = "小李";
        public int Add(int a, int b)
        {
            return a + b;
        }

        public int Multiply(int a, int b)
        {
            return a * b;
        }
    }

调用:

复制代码
 NotStaticClass notStaticClass = new NotStaticClass();
    notStaticClass.Add(10, 20);
    notStaticClass.Multiply(2, 4);
    Console.WriteLine(a);
    Console.WriteLine(b);
    Console.WriteLine(notStaticClass.Name );

输出:

csharp 复制代码
30
8
小李

我们可以看到对于非静态类的调用都是使用new关键字,new这个类的对象出来,然后使用这个对象名.方法名 去调用方法,对象名.属性去获取属性。

总结

在C#编程中一般没有特别要求必须使用静态或者非静态类,一般使用非常频繁的类可以写成静态类。

相关推荐
djarmy1 小时前
MAIN.c(1): warning C318: can’t open file ‘STC8G.H’ 报错 解决 分析
c语言·开发语言·mongodb
HEJOO92 小时前
深入理解 Java volatile 关键字:原理、用法与常见误区
java·开发语言·spring
曹牧2 小时前
Java:no content to map due to end of input
java·开发语言
阿维的博客日记2 小时前
Example 类全场景实战指南
java·mybatis
梦梦代码精2 小时前
《回收租赁系统技术选型避坑指南:业务闭环与二开自由度详解》
开发语言·低代码·docker·开源·代码规范
两点王爷2 小时前
SpringBoot 项目集成 GeoServer 源码,实现地图服务发布
java·spring boot·后端
隔窗听雨眠2 小时前
记一次SQL Server数据库性能分析:从CPU100%到单配置修复的完整诊断
开发语言·数据库·php
David猪大卫2 小时前
【C++修炼】智能指针使用及原理
开发语言·c++·经验分享·笔记·学习·考研·面试
charlie1145141912 小时前
现代Qt开发之图像处理进阶:像素操作与格式转换
开发语言·图像处理·qt
李永奉2 小时前
中科蓝讯SDK开发-BT893x 面条耳机连接vivo手机后连接APP端,最后手机端设置页面手动断开蓝牙连接,此时耳机端假断开
c语言·开发语言·嵌入式硬件·物联网·智能手机·电脑