首页 > 编程语言 >C#自动属性提供默认值的方法

C#自动属性提供默认值的方法

时间:2024-03-19 10:22:04浏览次数:21  
标签:Name C# System Person using 默认值 属性

编程之路转自:cjavapy.com/article/55/

_  .NET(C#)中,自动属性(Auto-Implemented Properties)提供了一种简洁的方式来实现属性而无需显式定义字段。但直到C# 6.0版本之前,不能在自动属性的声明中直接为其指定默认值。从C# 6.0开始,可以在自动属性声明中直接初始化默认值。_

1、在构造函数中设置默认值

在C#的早期版本中,或者当需要更复杂的初始化逻辑时,可以在类的构造函数中设置自动属性的默认值。如自动属性是静态的(即属于类本身而不是类的实例),则可以在静态构造函数中设置其默认值。1)在构造函数中设置默认值

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Person 
    {
        public Person()
        {
            Name = "Default Name";
        }
        public string Name { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            Console.WriteLine(p.Name);
            Console.ReadKey();
        }
    }
}

2)使用一般写法设置默认值

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Person 
    {
       private string name = "Default Name";
       public string Name 
       {
           get 
           {
               return name;
           }
           set
           {
               name = value;
           }
       }
    }
  
    public class MyClass
    {
        public static int MyStaticProperty { get; set; }
    
        static MyClass()
        {
            MyStaticProperty = 10; // 在静态构造函数中设置默认值
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            Console.WriteLine(p.Name);
            Console.WriteLine(MyClass.MyStaticProperty);
        }
    }
}

2、 直接在自动属性中初始化(C# 6.0及以后)

从C# 6.0开始,可以在自动属性的声明中直接指定默认值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Person 
    {
       public string Name { get; set; } = "Default Name";

    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            Console.WriteLine(p.Name);
        }
    }
}

3、使用属性初始化器(C# 9.0及以后)

从C# 9.0开始,可以使用属性初始化器(Property Initializers)在创建对象时直接初始化属性。



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Person 
    {
       public string Name { get; set; } = "Default Name";

    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person() { Name = "cjavapy.com" };
            Console.WriteLine(p.Name);
        }
    }
}

标签:Name,C#,System,Person,using,默认值,属性
From: https://www.cnblogs.com/summerZoo/p/18082142

相关文章

  • 从零开始写 Docker(七)---实现 mydocker commit 打包容器成镜像
    本文为从零开始写Docker系列第七篇,实现类似dockercommit的功能,把运行状态的容器存储成镜像保存下来。完整代码见:https://github.com/lixd/mydocker欢迎Star推荐阅读以下文章对docker基本实现有一个大致认识:核心原理:深入理解Docker核心原理:Namespace、Cgroups......
  • ElasticSearch - 基础概念和映射
    前言写这篇东西,是因为官方文档看着太痛苦,于是乎想用大白话来聊聊ElasticSearc(下面都简称ES)。所以下文对于ES一些概念的表述可能会与官方有出入,所以需要准确的表述和详细定义的,请跳转官方文档。我也尽量贴上官方的链接。前置知识:因为下文会使用mysql的一些概念来描述,所以......
  • C++刷题杂记
    目录C++中如何声明二维vectorC++中如何声明二维vector在C++中,你可以使用嵌套的std::vector来声明一个二维的vector。每个元素本身是一个std::vector,而这些元素的集合构成了外部的std::vector。以下是如何声明一个二维vector的示例:#include<vector>intmain(){//声......
  • gRPC的负载均衡
    目录一、什么是负载均衡1.1负载均衡软件1.2七层和四层负载二、负载均衡策略2.1轮循2.2加权轮循2.3最少连接数2.4最少连接数慢启动时间2.5加权最少连接2.6基于代理的自适应负载均衡2.7固定权重2.8加权响应2.9源IP哈希三、go-rpc负载均衡演示3.1proto3.2生成go文件3.......
  • C#,人工智能,机器学习,聚类算法,训练数据集生成算法、软件与源代码
    摘要:本文简述了人工智能的重要分支——机器学习的核心算法之一——聚类算法,并用C#实现了一套完全交互式的、可由用户自由发挥的,适用于聚类算法的训练数据集生成软件——Clustering。用户使用鼠标左键(拖动)即可生成任意形状,任意维度,任意簇数及各种数据范围的训练数据集,同时也可以......
  • C#,深度好文,精致好码,文本对比(Text Compare)算法与源代码
    VladimirI.Levenshtein一、文本对比的列文斯坦距离(编辑距离)算法在日常应用中,文本比较是一个比较常见的问题。文本比较算法也是一个老生常谈的话题。文本比较的核心就是比较两个给定的文本(可以是字节流等)之间的差异。目前,主流的比较文本之间的差异主要有两大类。一类是基......
  • matinal:SAP FICO会计凭证如何实现自动拆分
    ......
  • GPT实战系列-LangChain的Prompt提示模版构建
    GPT实战系列-LangChain的Prompt提示模版构建LangChainGPT实战系列-LangChain如何构建基通义千问的多工具链GPT实战系列-构建多参数的自定义LangChain工具GPT实战系列-通过Basetool构建自定义LangChain工具方法GPT实战系列-一种构建LangChain自定义Tool工具的简单方法G......
  • 基于多种优化算法的物联网无人机基站研究【布谷鸟搜索CS、大象群体优化EHO、灰狼优化G
     ......
  • LT6911UXE PIN对PIN LT6911UXC HDMI桥接到MIPIDSI/CSI/2 PORT LVDS,支持标准的4K60HZ分
    LT6911UXE描述: LT6911UXE是一款高性能HDMI2.0到MIPIDSI/CSI转换器,可用于VR、智能手机和显示器应用。HDMI2.0输入支持高达6Gbps的数据速率,这为60Hz的视频提供了足够的带宽。同时,还支持HDCP2.3进行数据解密。对于MIPIDSI/CSI输出,LT6911UXE具有可配置的单端口或双端口MIPIDSI......