首页
学习
活动
专区
工具
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条准则

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

1.7K30

设计模式:面向对象基础知识

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

43530

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; } } } 从以上代码可知,使用对象初始化器可使对象初始化代码变得更加简洁 再说说集合初始化器,用来完成对集合中某一元素初始化

15710

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

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

31320

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对象所有属性值都相等时,它们认为是相等

19220

使用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.4K30

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

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

48530

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 也可以标记为只读。

52720

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.1K20

什么是类和类成员?

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

2.2K40

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

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

10010

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.3K10

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行为。

71690

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

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

1K80

Js中常见内存泄漏场景

var obj = { a : { b: 11 } } // 此时两个对象创建,一个作为另一个a属性引用称为对象1,另一个obj变量引用称为对象2 // 此时两个对象都有引用变量.../ 对象2a属性引用解除,此时对象1只有a2一个引用 a2 = null; // 解除a2对于对象1引用,此时对象1可以垃圾回收 但是对于引用计数垃圾回收算法有个限制,当对象循环引用时,就会造成内存泄漏...事实上定义全局变量并不是一个好习惯,如果必须使用全局变量存储大量数据时,确保用完以后把它设置为null或者重新定义,与全局变量相关增加内存消耗一个主因是缓存,缓存数据是为了重用,缓存必须有一个大小上限才有用...遗忘计时器 计时器setInterval必须及时清理,否则可能由于其中引用变量或者函数都被认为是需要而不会进行回收,如果内部引用变量存储了大量数据,可能会引起页面占用内存过高,这样就造成意外内存泄漏...} 遗忘Set使用Set存储对象时,类似于脱离DOM引用,如果不将其主动清除引用,其同样会造成内存不自动进行回收,如果需要使用Set引用对象,可以采用WeakSet,WeakSet对象允许存储对象弱引用唯一值

2.4K20
领券