zoukankan      html  css  js  c++  java
  • 构造函数和属性初始化

    属性值的赋值应该在类的构造函数之前还是之后执行?

    public class TestClass 
    {
        public int TestProperty { get; set; } = 2;
        
        public TestClass() 
        {
            if (TestProperty == 1) 
            {
                Console.WriteLine("Shall this be executed?");
            }
    
            if (TestProperty == 2) 
            {
                Console.WriteLine("Or shall this be executed");
            }
        }
    }
    
    var testInstance = new TestClass() { TestProperty = 1 };
    

    在上面的示例中, TestProperty值在类的构造函数中或在类构造函数之后是1吗?


    在实例创建中分配属性值,如下所示:

    var testInstance = new TestClass() {TestProperty = 1};
    

    将在构造函数运行执行。但是,在C#6.0的类'属性中初始化属性值,如下所示:

    public class TestClass 
    {
        public int TestProperty { get; set; } = 2;
    
        public TestClass() 
        {
        }
    }
    

    将在构造函数运行之前完成。


    将上述两个概念结合在一个示例中:

    public class TestClass 
    {
        public int TestProperty { get; set; } = 2;
        
        public TestClass() 
        {
            if (TestProperty == 1) 
            {
                Console.WriteLine("Shall this be executed?");
            }
    
            if (TestProperty == 2) 
            {
                Console.WriteLine("Or shall this be executed");
            }
        }
    }
    
    static void Main(string[] args) 
    {
        var testInstance = new TestClass() { TestProperty = 1 };
        Console.WriteLine(testInstance.TestProperty); //resulting in 1
    }
    

    最后结果:

    "Or shall this be executed"
    "1"
    

    说明:

    首先将TestProperty值指定为2 ,然后运行TestClass构造函数,从而打印出

    "Or shall this be executed"
    

    然后由于new TestClass() { TestProperty = 1 } , TestProperty将被指定为1 ,使得Console.WriteLine(testInstance.TestProperty)打印的TestProperty的最终值为

    "1"


    转 https://riptutorial.com/zh-CN/csharp/example/18800/%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0%E5%92%8C%E5%B1%9E%E6%80%A7%E5%88%9D%E5%A7%8B%E5%8C%96
  • 相关阅读:
    vue系列---响应式原理实现及Observer源码解析(七)
    学习Lowdb小型本地JSON数据库
    渐进式web应用开发---Service Worker 与页面通信(七)
    webpack4核心模块tapable源码解析
    electron 创建托盘应用
    运维堡垒机开发
    使用Supervisord软件管理go服务进程
    安装Harbor之http版本
    Ubuntu 18 LTS netplan 网络配置
    用GO开发企业级分布式云存储系统
  • 原文地址:https://www.cnblogs.com/wl-blog/p/13841383.html
Copyright © 2011-2022 走看看