3_静态类与非静态类的区别

静态类与非静态类的区别?

  1. 静态类无法实例化(换句话说,无法使用new运算符创建类类型的变量。 由于不存在任何实例变量,因此可以使用类名本身访问静态类的成员)。
  2. 静态构造函数只调用一次,在程序所驻留的应用程序域的生存期内,静态类会保留在内存中(即使用Static修饰的类,应用一旦启用静态类就会保留在内存中)。
  3. 静态类只包含静态成员
  4. 不能包含实例构造函数。
  5. 静态类会进行密封,因此不能继承。 它们不能继承自任何类(除了 Object)。 静态类不能包含实例构造函数。 但是,它们可以包含静态构造函数。

1. 实例化

  • 非静态类可以实例化,也就是说,可以使用 new 关键字创建类的对象。
  • 静态类不能实例化,无法使用 new 关键字创建类的对象。

示例:

// 非静态类
public class NonStaticClass
{
    public int InstanceVariable;
    public NonStaticClass()
    {
        InstanceVariable = 10;
    }
    public void Print()
    {
        Console.WriteLine(InstanceVariable);
    }
}

// 静态类
public static class StaticClass
{
    public static int StaticVariable;
    static StaticClass()
    {
        StaticVariable = 20;
    }
    public static void Print()
    {
        Console.WriteLine(StaticVariable);
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        // 非静态类可以实例化
        NonStaticClass nonStaticClass = new NonStaticClass();
        nonStaticClass.Print(); // 输出:10
        // 静态类不能实例化
        //StaticClass staticClass = new StaticClass(); // 错误:无法创建“StaticClass”类型的对象
        // 访问静态类的成员需要使用类名
        StaticClass.Print(); // 输出:20
    }
}

2. 构造函数

  • 非静态类可以包含实例构造函数,用于在创建对象时初始化对象的成员。
  • 静态类不能包含实例构造函数,但可以包含静态构造函数,用于在类第一次加载到内存时执行一次性初始化。

示例:

// 非静态类可以包含实例构造函数
public class NonStaticClass
{
    public int InstanceVariable;
    public NonStaticClass()
    {
        InstanceVariable = 10;
    }
    public void Print()
    {
        Console.WriteLine(InstanceVariable);
    }
}

// 静态类可以包含静态构造函数
public static class StaticClass
{
    public static int StaticVariable;
    static StaticClass()
    {
        StaticVariable = 20;
    }
    public static void Print()
    {
        Console.WriteLine(StaticVariable);
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        // 非静态类的实例构造函数在创建对象时执行
        NonStaticClass nonStaticClass = new NonStaticClass();

        // 静态类的静态构造函数在类第一次加载到内存时执行
        StaticClass.Print(); // 输出:20
    }
}

3. 成员类型

  • 非静态类可以包含实例成员和静态成员。
  • 静态类只能包含静态成员。

示例:

// 非静态类可以包含实例成员和静态成员
public class NonStaticClass
{
    public int InstanceVariable; // 实例成员
    public static int StaticVariable; // 静态成员
    public NonStaticClass()
    {
        InstanceVariable = 10;
    }
    public void Print()
    {
        Console.WriteLine(InstanceVariable);
        Console.WriteLine(StaticVariable);
    }
}

// 静态类只能包含静态成员
public static class StaticClass
{
    public static int StaticVariable;
    static StaticClass()
    {
        StaticVariable = 20;
    }
    public static void Print()
    {
        Console.WriteLine(StaticVariable);
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        NonStaticClass nonStaticClass = new NonStaticClass();
        nonStaticClass.Print(); // 输出:10 20
        // 访问静态类的成员需要使用类名
        StaticClass.Print(); // 输出:20
    }
}

4. 继承

  • 非静态类可以继承自其他类。
  • 静态类不能继承自其他类,也不能被其他类继承。

示例:

// 非静态类可以继承自其他类
public class Animal
{
    public string Name { get; set; }
}
public class Dog : Animal
{
    public string Bark()
    {
        return "汪汪";
    }
}
// 静态类不能继承自其他类
//public static class StaticClass : Animal // 错误:静态类不能继承
posted @ 2024-03-03 23:04  甜饼怪2030  阅读(481)  评论(0)    收藏  举报