首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用C#的get set属性被认为是好习惯吗?

答案

C# get set 属性:概念、优势及应用场景

在 C# 中,getset 属性是用于访问和修改类成员变量(属性)的访问器。这些属性为开发人员提供了便利,同时遵循了封装和访问控制的基本原则。

概念

get 属性:用于读取类成员变量的值。

set 属性:用于设置类成员变量的值。

优势

  1. 封装:通过使用 getset 属性,开发者可以控制类成员变量的访问和修改,从而实现封装。
  2. 访问控制get 属性允许在类级别对成员变量进行访问,而 set 属性允许在类级别修改成员变量的值。这有助于在数据访问层实现最小权限原则。
  3. 代码可读性:使用 getset 属性可以提高代码的可读性。通过阅读访问器的名称,开发人员可以快速了解该属性允许执行的操作。

应用场景

以下是一些常见的 C# 应用程序中应用 getset 属性的场景:

  1. 数据绑定:在 Windows 窗体应用程序中,DataSourceDataMember 属性分别对应 getset 访问器,这样就可以实现数据绑定。
  2. 配置文件:在应用程序中使用 getset 属性来读取和设置配置文件中的参数。
  3. 权限检查:使用 get 属性从数据库中检索当前用户的权限,然后使用 set 属性来更新该权限。

推荐的腾讯云产品和相关链接

  1. 腾讯云 C# 扩展模块腾讯云 C# 扩展模块。该扩展为 C# 开发者提供了一系列云服务支持。
  2. 腾讯云开发腾讯云开发 是一个用于云原生应用开发的平台。该平台提供了丰富的 API 和工具,以支持开发者构建、部署和运维云原生应用。
  3. 腾讯云 Marketplace腾讯云 Marketplace 是一个云服务交易及管理平台。开发者可以在这里找到众多第三方云服务提供商提供的产品和服务。

请注意,上述推荐的产品和链接可能随时间而变化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则

● 使用属性,可以非常轻松的在get和set代码段中加入检查机制。 需要注意,正因为属性是用方法实现的,所以它拥有方法所拥有的一切语言特性: 1)属性增加多线程的支持是非常方便的。...你可以加强 get 和 set 访问器(accessors)的实现来提供数据访问的同步。 2)属性可以被定义为virtual。 3)可以把属性扩展为abstract。...6)因为实现实现访问的方法get与set是独立的两个方法,在C# 2.0之后,你可以给它们定义不同的访问权限,来更好的控制类成员的可见性。...2)该类型的公有接口都是由访问其数据成员的属性定义的吗? 3)你确定该类型绝不会有派生类型吗? 4)你确定该类型永远都不需要多态支持吗?...原则14 保证值类型的常量性和原子性 常量性的类型使得我们的代码更加易于维护。不要盲目地为类型中的每一个属性都创建get和set访问器。

1.8K30
  • 设计模式:面向对象的基础知识

    在 C# 9.0 版本中还提供了属性的 init 特性,可以更方便地提供封装性: public class UserInfo { public string Name { get; init;...试想一下,如果我们对类中属性或方法全部都使用 public ,调用方可以任意修改属性和调用方法,这样会使代码变得不可控,属性可能被很多地方以不同的方式进行修改,代码难以维护。...继承 目前面向对象的语言基本都支持继承特性,只是语法上有些细微的差别,比如 C# 语言是使用冒号,Java 语言使用 extends 关键字。但都是表示 is-a 的关系。...我们虽然都在使用着面向对象的语言,但很多的时候思维还是面向过程的,具体体现在: 实体类的属性直接定义为 public ,set 和 get 都安排上,外部可以任意获取和赋值,很多时候使用代码生成工具直接生成实体类...,默认的 set 和 get 都是 public ,也没有依据具体的业务进行修改,严重破坏了封装特性; 数据和行为的分离,也就是所谓的贫血模式,但真正的对象是数据和行为在一起的,我们可能每天都在写这样的代码

    45130

    C# 学习笔记(11)—— C# 的春天

    如果已经熟悉了 C# 1.0 和 C# 2.0 的核心特性,那么利用这些特性,可以实现任何想要实现的应用程序了。但是我们会常常抱怨;我的代码就不能再简洁点吗?...{ return name; } set { name = value; } } } C# 3.0 之后,对于不需要额外验证的属性(需要额外验证的属性还是必须采用之前的方式来定义...),你可以使用自动实现的特性来对属性的定义进行简化,此时不再需要额外定义一个私有的字段了 class Person { public string Name {get; set; } } 从改写后的代码可以看出...并且变量仍然是静态类型,只是你在代码没写出来而已,这个工作交给了编译器,它会根据变量的值去推断类型 使用隐式类型时有一些限制,包括以下几点: 被声明的变量时一个局部类型,不能位字段(包括静态字段和实例字段...; set; } public int Age { get; set; } } } 从以上代码可知,使用对象初始化器可使对象的初始化代码变得更加简洁 再说说集合初始化器,用来完成对集合中某一元素的初始化

    18010

    开心档之​C# 基本语法​

    它具有 length 和 width 属性。根据设计,它可能需要接受这些属性值、计算面积和显示细节。...例如: }//end class Rectangle 成员变量 变量是类的属性或数据成员,用于存储数据。...例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。 标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。 不能与C#的类库名称相同。...C# 关键字 关键字是 C# 编译器预定义的保留字。这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,可以在关键字前面加上 @ 字符作为前缀。...在 C# 中,有些关键字在代码的上下文中有特殊的意义,如 get 和 set,这些被称为上下文关键字(contextual keywords)。

    32820

    使用C#也能网页抓取

    虽然ScrapySharp被认为是一个强大的C#包,但程序员使用它进行维护的概率并不是很高。 Puppeteer Sharp是著名的Node.js Puppeteer项目的.NET端口。...这个类将代表一本书,有两个属性-Title和Price.示例如下: public class Book { public string Title { get; set; } public string...Price { get; set; } } 然后,为Title – //h1在浏览器中打开一个书页。...我们还有一个关于如何使用JavaScript编写网络爬虫的分步教程 常见问题 Q:C#适合网页抓取吗? A:与Python类似,C#被广泛用于网页抓取。...在决定选择哪种编程语言时,选择您最熟悉的一种至关重要。不过您将能够在Python和C#中找到示例的网页抓取工具。 Q:网络抓取合法吗? A:如果在不违反任何法律的情况下使用代理,则它们可能是合法的。

    6.5K30

    C# record

    1.概要 C# record 是一种引用类型,是C# 9.0引入的新特性。它是一种轻量级的、不可变的数据类型,具有只读属性,因此在创建后无法更改,这使得它线程安全。...init 属性: C# 9.0引入了init关键字,用于声明属性的初始化器。被init修饰的属性只能在对象初始化期间被设置,之后将变为只读,实现了不可变性。...{ get; set; } public required string LastName { get; set; } }; 记录结构也可以是可变的,包括位置记录结构和没有位置参数的记录结构...; set; } public double Y { get; set; } public double Z { get; set; } } 虽然记录可以是可变的,但它们主要用于支持不可变的数据模型...1.3相等性 record类型的相等性是基于值相等性(value equality)的,意味着当两个record对象的所有属性值都相等时,它们被认为是相等的。

    23520

    C# 基础知识系列- 4 面向对象

    } private string name; public string Name { get { return name; } set {...中称为Field,也就是字段的意思; public static int Count 和public string Name 这两个在C#中称为Property,也就是属性的意思。...当然,不是说一个是private就叫字段,另一个是public就称之为属性,而是因为属性有get和set来控制访问和赋值的行为。...这里先简单介绍一下三大特性, 封装:对象的方法实现对外是隐藏的,就像我们在不拆开钢笔之前很难知道钢笔的墨水是怎么流动然后写出字的; 继承:子类天然拥有父类的属性和方法,假如我们还有一只特种钢笔,那么我们可以把这只特种钢笔抽象出的类认为是钢笔的子类...当然两种方法可以共存,但是不会两个方法都被认为是接口的实现方法。接口优先使用接口名.方法名 作为实现方法,如果没找到则认为同名同参的方法为实现方法。

    50730

    C#语法——消息,MVVM的核心技术。

    有同学可能会好奇,PropertyChanged事件是何时被赋值的呢?别心急,请耐心往下看。 ViewModel定义完成之后,我们再看Xaml对应的cs文件。这里我们也定义了一个KName属性。...而在Xaml.cs文件中,我们将VeiwMode赋值给了DataContext这个数据上下文,然后,我们就看到了,前台直接使用了VM里的属性。 这样简单的MVVM就实现了。...简洁的ViewModel 在上面我们看到了ViewModel的创建和使用,但ViewMode中每个属性都要设置成如此复杂的形态,稍微有点难受。...; public string KName { get { return _KName; } set { _KName...C#语法——元组类型 C#语法——泛型的多种应用 C#语法——await与async的正确打开方式 C#语法——委托,架构的血液 C#语法——事件,逐渐边缘化的大哥。 我对C#的认知。

    1.2K20

    C# 8 新增小功能

    尽管 C# 8 应该会在今年发布,并且 C# 8.x 和 9 的路线图也开始形成,但是,微软正在继续审查下一个版本的特性。...过时的属性 与 Visual Basic 不同,C# 无法把单个 getter 和 setter 标记为过时。...就在几个星期前,我试图清理一些大量使用 get/set 属性的代码,使其成为一个更加只读的初始化的构造函数(ctor-initialized),此时我发现我真希望该特性是这样的。...4 月,该特性从 C# 9 迁移到了 C# 8 上。 结构上的只读成员 当分配给只读字段或用作 in 参数时,结构上的方法有个性能小问题。如果我们调用结构上的方法,编译器首先会生成防御性副本。...这和Pure 属性不同,只要只读方法不修改结构本身的值,那么就有明显的副作用。 自动实现属性的 getter 将被自动认为是只读的。在某些情况下,setter 也可以被标记为只读。

    53720

    C#中使用 record 的好处 因为好用所以推荐!

    一晃距C# 9发布已经4年了,对于record关键字想必大家都不陌生了,不过呢发现还是有很多同学不屑于使用这个语法糖,确实,本质上 record 就是 class 的封装,能用 record 书写的类,...C# 12 中新增的几大功能你都知道吗?...下面我简略聊一聊 record 的好处和最佳场景: 简化语法 我们只需要一行代码就可以定义完成,这个是最直观节省编码的方式,我们不需要编写一堆枯燥的get;set; 也不需要编写构造函数等样板代码: public...UserName{ get; set;} public int Age { get; set;} } var user1 = new User { UserName = "vipwan" , Age...Age { get; set; } } //由于PersonStruct本身是struct因此不能被继承 public record struct PersonStruct(string FirstName

    10810

    什么是类和类的成员?

    那么,你看看,这样一个类一旦被定义,它所描述或者代表的是什么?是一个学生群体。一个具有相同属性的群体。所以,对这样的群体来说,它们不是具有共同的类别特征吗?把它们称之为一个类不是很恰当吗?...类的成员之二:属性 1、通常理解为类的公有变量,修饰符public。 2、定义属性,通常有 get 和 set 两个方法。...3、get 支持读的访问,返回与属性声明类型相同的数据,调用时可以得到属性内部的字段的值或引用。 4、set 支持写的访问,它的作用是调用时,可以给属性内部字段或引用赋值。...5、类的成员默认都为私有,但属性通常是公有变量,因此一般使用public修饰符。 6、属性可以忽略get或set访问器,但是不能两个同时都忽略。...public class MyClassName { //类的属性 public int x { get; set; } public string y { get; } public datetime

    2.3K40

    C#一句很简单而又很经典的代码

    一、知识点 二、问题 如果以上四个问题,你很自信,那么以下,您就不要看了,因为我想说的东西真的很简单。 如果你开始怀疑自己,可以继续向下看。你自己到底真的理解吗??? 再看下面这段代码有没有问题?...第6行编译报错: 三、分析 如果你非常清楚属性的本质的话,那么上述代码可以进行转换,将属性转换为普通方法。...所以C#语法在对于这种情况,帮我们做了一个处理,如果写了这样的代码,直接给出编译报错。C#还是很智能的。就是如果我们错误的进行一个无意义的操作,会直接给出提示。这里给C#语法赞一个。...四、杂谈 这一段代码虽然好像很简单,但是真的藏的很深,楼主工作三年。记得曾经有一次去网易二面,被一个大佬问到这个问题,懵逼了,就乱猜吧,一开始说,那个枚举值中的x只是get,没有set。...推荐阅读: 一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel 推荐一个基于 .NET 开发的开源工作流项目 推荐一个使用 .NET 和 Angular 开发的在线任务管理工具

    11510

    (保存)C#基础概念二十五问

    11.可以使用抽象函数重写基类中的虚函数吗? 12.密封类可以有虚函数吗? 13.如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后可以有几个属性访问器?...如果基类中有 get 和 set 两个呢? 14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗? 15.接口可以包含哪些成员? 16.类和结构的区别?...关键字一起使用,因为使用 sealed 修饰符的方法或属性肯定是基类中相应的虚成员 通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱 恰当的利用 sealed...如果基类中有 get 和 set 两个呢? 答: 如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后也应只有一个。...如果基类中有 get 和 set 两个属性访问器,那么继承类中可以只有一个也可以同时有两个属性访问器 14.abstract 可以和 virtual 一起使用吗?

    1.1K80

    C# 9.0中引入的新特性init和record的使用思考

    .NET 5.0已经发布,C# 9.0也为我们带来了许多新特性,其中最让我印象深刻的就是init和record type,很多文章已经把这两个新特性讨论的差不多了,本文不再详细讨论,而是通过使用角度来思考这两个特性...init init是C# 9.0中引入的新的访问器,它允许被修饰的属性在对象初始化的时候被赋值,其他场景作为只读属性的存在。...直接使用的话,可能感受不到init的意义,所以我们先看看之前是如何设置属性为只读的。 private set设置属性为只读 设置只读属性有很多种方式,本文基于private set来讨论。...'value' ) 另外在赋值的时候,使用private set修饰的属性,需要定义构造函数,通过构造函数赋值。...record类型通过基类型以及所有的属性及字段的方式来计算HashCode,这在整个继承层次结构中增强了基于值的相等性,也就意味着两个同名同姓的人不会被认为是同一个人 Clone ?

    1.4K10

    java学习:OOP入门

    有c#基础的程序员,学习java其实很容易上手,绝大多数语法基本相同,概念也接近 1、属性 java中没有象c#中的Property概念,只有set,get方法 package jmyang.oop;.../注:final关键字,可省略 final int speed = 1;     //注:abstract关键字,可省略 abstract void Run(); } 实现接口必须在定义类时,使用...    } } 4、java:final 与 c#:sealed 如果一个类不想被其它类所继承,可以在定义类时,用final关键字修饰,这跟c#中的sealed关键字作用相同....注:c#中static关键字可以用来修饰类,表示该类不能被继承,而且类中的方法/字段,都必须是static类型,java中没有对应的概念(java中的static也不能用于class定义) 6、常量表示法...的理念不同,java认为子类中的同名方法是override行为,是重载,而c#则认为是隐藏父类的方法,是hide行为。

    73790
    领券