zoukankan      html  css  js  c++  java
  • C#几个例子[静态构造函数,继承,虚方法]

    1.静态构造函数的执行
    静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
    代码
    using System;

    public class A
    {
      
    public static int X;
      
    static A()
      {
        X 
    = B.Y + 1;
      }
    }


    public class B
    {
      
    public static int Y = A.X + 1;
      
    static B()
      {
      }
    }

    public class C
    {
        
    public static void Main()
        {
            Console.WriteLine( 
    "X={0},Y={1}", A.X, B.Y );
        }
    }

    2,1

    静态构造函数具有以下特点:

    • 静态构造函数既没有访问修饰符,也没有参数。

    • 在创建第 一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化

    • 无法直接调用静态构造函数。

    执行shunxu1. 先static 变量初始化

    2. 再static 构造函数

    3. 实例化时先初始化非静态变量,后自动调用构造函数.


    继承中new 和override 区别
     public abstract class A
        {
            
    public A()
            {
                Console.WriteLine(
    'A');
            }

            
    public virtual void Fun()
            {
                Console.WriteLine(
    "A.Fun()");
            }
        }

        
    public class B : A
        {
            
    public B()
            {
                Console.WriteLine(
    'B');
            }

            
    public new void Fun()
            {
                Console.WriteLine(
    "B.Fun()");
            }

            
    public static void Main()
            {
                A a 
    = new B();
                a.Fun();
            }
        }

    结果是:

    A

    B

    A.Fun()

    因为B中是New,  如果是override重写这方法,则会

     3

    代码
     public class A
        {
            
    public virtual void Fun1(int i)
            {
                Console.WriteLine(i);
            }

            
    public void Fun2(A a)
            {
                a.Fun1(
    1);
                Fun1(
    5);
            }
        }

        
    public class B : A
        {
            
    public override void Fun1(int i)
            {
                
    base.Fun1(i + 1);
            }

            
    public static void Main()
            {
                B b 
    = new B();
                A a 
    = new A();
                a.Fun2(b);
                b.Fun2(a);
            }
        }

    结果:

    2

    5

    1

    6

    public class A
        {
            
    public A() 
            {
                printMe();
            }
            
    public virtual void printMe(){}
        }

        
    public class B:A
        {
            
    int x = 1;
            
    int y;
            
    public B() 
            {
                y 
    = -1;
            }
            
    public override void printMe()
            {
                Console.Write(
    "A={0},B={1}",x,y);
                Console.ReadLine();
            }
        }
        
    public class Program
        {
            
    static void Main(string[] args)
            {
                
    new B();
            }
        }

     结果为:

    A=1,B=0

  • 相关阅读:
    java bigdecimal (java double也时会失真)
    图像二维频谱的理解
    设计模式:装饰器模式实现 固定类功能
    c# winform 技术提升
    c# 多态的美丽(虚方法、抽象、接口实现)
    5天玩转C#并行和多线程编程
    [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)
    用Ngen指令加快C#程序的启动速度
    cmd 批处理制作
    c#程序打包、机器代码生成(Ngen.exe)
  • 原文地址:https://www.cnblogs.com/chinabc/p/1707313.html
Copyright © 2011-2022 走看看