首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用前验证类是否配置了所有属性?

如何在使用前验证类是否配置了所有属性?
EN

Stack Overflow用户
提问于 2009-06-07 00:08:22
回答 2查看 132关注 0票数 1

我想知道最好的方法是在使用类之前验证类是否具备所有必需的细节。

例如,假设我有一个Book类,我希望将有关该书的一组属性传递给Book构造函数。

代码语言:javascript
运行
AI代码解释
复制
Book book = new Book(bookProperties);

我想确保BookProperties是完整的,也就是拥有所有的信息。

假设在本例中,我有以下内容:

  • 书名
  • 图书作者
  • 原出版日期

一种方法是,我可以创建一个只接受所有3项的默认构造函数:

代码语言:javascript
运行
AI代码解释
复制
BookProperties bookProperties = new BookProperties("2001: A Space Odyssey",
                                                   "Arthur C. Clarke",
                                                   1968);

现在可以了,如果我们只有三个值,但是假设我的类有10个或更多的属性,这些属性需要用户在创建Book类之前进行初始化。

我在想的一件事是在BookProperties中有一种叫做isValid的方法。然后,在Book类的构造函数中,我将查看返回是否为bookProperties.isValid并断言是否为false。

这是个好主意还是我搞错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-07 00:15:36

如果需要 10值,那么将10个值传递给构造函数并不是闻所未闻的事情--但您所描述的更像是一个实体对象。为了方便起见,通常只使用属性设置程序。使用C# 3.0,您可以使用初始化器语法来方便和清晰地执行此操作:

代码语言:javascript
运行
AI代码解释
复制
Book book = new Book {
    Title = "2001: A Space Odyssey",
    Author = "Arthur C. Clarke",
    PublishedYear = 1968
};

您可以使用BookProperties对象(作为某种构建器),但是在这种情况下,为什么不将构造作为构建器上的一个方法呢?然后,构建器在创建Book (大概是通过internal构造函数)之前进行验证,并在出现问题时抛出异常。我假设使用BookProperties是为了(例如)允许一个不可变的Book,但是构建器不需要是不可变的:

代码语言:javascript
运行
AI代码解释
复制
var bookProperties = new BookProperties(); // builder?
bookProperties.Title = "2001: A Space Odyssey";
...
Book book = bookProperties.CreateBook();

就我个人而言,在大多数情况下,我只使用Book方法(最上面的方法)--例如,这种方法与常见的.NET序列化引擎和绑定框架(它们都像无参数构造函数和get/set属性一样)非常适用。如果您想要验证,那么只需向Validate()添加一个IsValue {get;}方法(或IsValue {get;}属性)即可。或者实现IDataErrorInfo

票数 3
EN

Stack Overflow用户

发布于 2009-06-07 00:13:00

如果这些属性确实是必需的,那么它们应该在构造函数中。当然,您可以使用重载来省略具有可接受的默认值的属性。

10甚至20个参数可能不是很漂亮,但它比备选方案要好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/961464

复制
相关文章
【图像篇】OpenCV图像处理(二)---图像读取与显示
在上一篇文章中,我们简要介绍了图像的基础知识,包括图像彩色通道,像素,分辨率等知识,学会这些东西,我们才能更好的理解图像处理的各种操作,今天,我们将会用上一篇文章(【图像篇】opencv图像处理(一)---图像基础知识)提到的工具--OpenCV,并用python语言调用OpenCV接口来进行实际的代码操作,一起来看看吧!
用户5410712
2022/06/01
1.2K0
【图像篇】OpenCV图像处理(二)---图像读取与显示
c语言opencv读取图像_matlab读取一幅图像并显示
专栏地址:『youcans 的 OpenCV 例程300篇 – 总目录』 01. 图像的读取(cv2.imread) 02. 图像的保存(cv2.imwrite) 03. 图像的显示(cv2.imshow) 04. 用 matplotlib 显示图像(plt.imshow)
全栈程序员站长
2022/09/27
1.9K0
【python-opencv】读取、显示、写入图像
cv.waitKey()是一个键盘绑定函数。其参数是以毫秒为单位的时间。该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果0被传递,它将无限期地等待一次敲击键。它也可以设置为检测特定的按键,例如,如果按下键 a 等,我们将在下面讨论。
西西嘛呦
2020/08/26
1.6K0
Python+OpenCV的图像读取、显示、保存
一、图像的读取 图像的读取主要函数是cv2.imread()。 函数格式:Mat cv::imread (const String & filename, int flags = IMREAD_COLOR) 功能:读取图片文件。 参数: windows位图:后缀名为bmp JPEG文件:后缀名为jpeg/jpg JPEG2000:后缀名为jp2 便携式网络图像文件:后缀名为png TIFF文件:后缀名为tiff/tif 参数二是整型的flag,标志,默认值为IMREAD_COLOR,取值有如下几种: IMREAD_UNCHANGED:如果设置,则按原样返回加载的图像(带有Alpha通道,否则会被裁剪)。 IMREAD_GRAYSCALE:如果设置,总是将图像转换为单通道灰度图像读入。 IMREAD_COLOR:如果设置,总是将图像转换为3通道BGR彩色图像读入。 IMREAD_ANYDEPTH:如果设置,当输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位。 IMREAD_ANYCOLOR:如果设置,图像将以任何可能的颜色格式读取。 IMREAD_LOAD_GDAL:如果设置,总是使用GDAL驱动程序加载图像。 IMREAD_REDUCED_GRAYSCALE_2:如果设置,总是将图像转换为单通道灰度图像,图像尺寸减小1/2。 IMREAD_REDUCED_COLOR_2:如果设置,总是将图像转换为3通道BGR彩色图像,图像尺寸减小1/2。 IMREAD_REDUCED_GRAYSCALE_4:如果设置,总是将图像转换为单通道灰度图像,图像尺寸减小1/4。 IMREAD_REDUCED_COLOR_4:如果设置,总是将图像转换为3通道BGR彩色图像,图像尺寸减小1/4。 IMREAD_REDUCED_GRAYSCALE_8:如果设置,总是将图像转换为单通道灰度图像,图像尺寸减小1/8。 IMREAD_REDUCED_COLOR_8:如果设置,总是将图像转换为3通道BGR彩色图像,图像尺寸减小1/8 常用的是前三种。因为flags是整型,所以传入数值也行: flags >0:等同于IMREAD_COLOR。 flags =0:等同于 IMREAD_GRAYSCALE。 flags <0: 等同于IMREAD_UNCHANGED。 通常是给1、0、-1,给其他整型也是可以的。 返回值:Mat类型。从opencv2开始,用于存放图像的数据类型就是Mat, 二、图像的显示 图像读取后,下一步就是再把图像显示出来,主要函数有:cv2.namedWindows()、cv2.imshow()。再另外再介绍三个函数cv2.waitKey()、cv2.destroyWindow()、cv2.destroyAllWindows()。 2.1 cv2.namedWindows函数介绍 void cv::namedWindow (const String & winname,int flags = WINDOW_AUTOSIZE ) 功能:创建一个窗口。 参数:参数一是winname,给创建的窗口起一个名字,以后通过这个名字调用该窗口;参数二整型的flags,定义窗口的属性,默认值是WINDOW_AUTOSIZE,其他取值如下所示: WINDOW_NORMAL:用户可以调整窗口大小(不受约束)/也可以使用将全屏窗口切换为正常大小。 WINDOW_AUTOSIZE:用户无法调整窗口大小,窗口大小随显示图像的大小而变化。 WINDOW_OPENGL:带有opengl支持的窗口。 WINDOW_FULLSCREEN:将窗口更改为全屏。 WINDOW_FREERATIO:不遵循图像的比例调整图像后在窗口显示 WINDOW_KEEPRATIO:根据图像的比例调整图像后在窗口中显示 2.2 cv2.imshow函数介绍 void cv::imshow (const String & winname, InputArray mat ) 功能:在指定窗口显示图像。 参数:参数一是窗口名;参数二设置为要显示的图像。 注意此函数之后应该跟随函数waitKey,指定窗口显示多少毫秒。 2.3 cv2.waitKey函数介绍 int cv::waitKey (int delay = 0) 功能:等待按键或延迟多少毫秒。 参数:整型的delay,默认值是0。设置为0表示永久等待按键,设置为非零,表示延迟delay毫秒。该函数仅在创建至少一个窗口并且窗口处于活动状态时才起作用。 2.4 cv2.destroyWind
菲宇
2019/11/12
3.8K0
OpenCV中图像的读取,显示与保存
相关函数:cv2.imread()、cv2.imshow()、cv2.imwrite()
py3study
2020/01/19
3.1K0
OpenCV 入门教程:图像读取和显示
在计算机视觉和图像处理领域,读取和显示图像是最基础且常见的操作之一。 OpenCV 作为一个强大的计算机视觉库,提供了丰富的功能来处理图像数据。本文将以读取和显示图像文件为中心,介绍使用 OpenCV 进行图像读取和显示的基本步骤和实例。
小蓝枣
2023/07/10
1.1K0
OpenCV 入门教程:图像读取和显示
【说站】php显示和实际时间不同的解决
1、使用“ini_set('date.timezone','PRC')”设置时区。
很酷的站长
2022/11/26
8250
【说站】php显示和实际时间不同的解决
matlab读取tif图像并显示_matlab关闭窗口
info = imfinfo(filename,fmt) %输入图像名,图像的格式
全栈程序员站长
2022/11/09
7590
Android App java 读取raw图像数据然后显示
src\main\java\com\wfh\canvasdemo\DataUtil.java
IT工作者
2022/05/20
6840
PHP读取163邮箱获取联系人
PHP读取163邮箱获取联系人 PHP环境:7.0以上 <?php error_reporting(0); //邮箱用户名(不带@163.com后缀的) $user = 'username
红目香薰
2022/11/29
5860
Python获取图像大小_如何读取0像素图片
但是在使用百度OCR进行文字识别的时候,文字识别的图片大小不能超过4M,在自动识别文字的时候,就避免不了读取图片的内存大小,如果是大于4M的话,要对图片进行压缩,下面是读取图片内存的代码:
全栈程序员站长
2022/11/04
1.4K0
Ex1:图像读取和显示以及像素操作
dev下搭建环境,详情见https://www.jianshu.com/p/d5e18b9b0333
平凡的学生族
2019/05/25
5330
C#获取摄像头拍照显示图像
之前有个需求,就是在web界面可以实现调用摄像头,用户把手机的个人二维码展示给摄像头,摄像头进行摄像识别用户。
zls365
2021/03/16
1.1K0
OpenCV-Python学习(2)—— OpenCV 图像的读取和显示
1. 学习目标 图像理解 图像读取与显示 2. 灰度图像 —— 单通道 1. 人眼中的灰度图像 2. 计算机中的灰度图像 [[ 72 72 71 ... 151 154 156] [ 75 73 69 ... 152 155 158] [ 78 73 66 ... 152 157 160] ... [ 94 94 94 ... 208 197 187] [ 92 92 93 ... 208 200 191] [ 96 96 97 ... 208 202 195]] 3
Rattenking
2022/09/30
1.3K0
OpenCV-Python学习(2)—— OpenCV 图像的读取和显示
php案例:获取到实际地址的控制器 方法 参数
贵哥的编程之路
2023/10/16
1540
php案例:获取到实际地址的控制器 方法 参数
使用PHP获取图像文件的EXIF信息
在我们拍的照片以及各类图像文件中,其实还保存着一些信息是无法直观看到的,比如手机拍照时会有的位置信息,图片的类型、大小等,这些信息就称为 EXIF 信息。一般 JPG 、 TIFF 这类的图片文件都会有这样的信息。EXIF 其实就是专门为这种数码照片所定制的,专门用于记录数码照片的属性信息和拍摄数据的,最初由日本制定。这个其实很好理解,日本对相机行业基本是垄断般的存在,所以这类的标准当然就是由他们制定啦!
硬核项目经理
2021/08/06
1.7K0
Windows下使用海康相机SDK获取图像并在Qt显示
点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多同志
用户5908113
2020/03/11
5.3K2
Windows下使用海康相机SDK获取图像并在Qt显示
点击加载更多

相似问题

从国家代码中获取国家名称

819

从国家名称中获取ISO国家代码

40

如何从国家代码中获取国家名称?

11

如何从国家代码中获取国家名称?

43

如何从国家名称中获取国家代码?

20
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档