莫名其妙的问题,找了几天资料还是不知道:结构体相关的问题,各位顺道帮我解释一下

nicch 2006-07-12 01:59:21
结构体是值类型,那么就是我的问题:

1.结构体到底要不要用new初始化?看到有书说不要,但是在C# 2005中如果没有初始化编译的时候就会报错的,提示未赋值的变量,必须初始化一下;

2.返回类型为结构体的函数,如果返回的是空的结构,应该如何返回?如下:
public SaveStatus Save(int i)
{
//
if(..)
{
return ...; //这个是正常的返回
}else{
return ...; //这里出现异常,需要返回空结构。
}
}
上面返回空结构的那个return用 return null不行,难道真的要定义一个新的结构然后返回??

3.与2类似,只不过是一个函数:
public void Save(int i,MultiInfo info)
{
}
现在调用这个过程的时候info是不需要赋予初始值的,那么传递参数的时候应该如何传递?
用Save(3,null)是不行的,已经试过了。


-------------
谢谢。
...全文
196 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tigerjacky 2006-08-14
  • 打赏
  • 举报
回复
mark
nicch 2006-07-12
  • 打赏
  • 举报
回复
感谢各位,马上试试去
今晚系统刚重装,嘎嘎.
runrunrun 2006-07-12
  • 打赏
  • 举报
回复
1. 要用 new 初始化。但基本类型(int,float等等)可以不要。
2. 必须创建一个空对象。但C#2.0里有一个新类型Nullable,或者int?, float? 等,把结构用类包装了一下,可以返回null
3. 把类型改成
public void Save(int i,MultiInfo? info)
{
}
diandian82 2006-07-12
  • 打赏
  • 举报
回复
楼上正解
sxlfybb 2006-07-12
  • 打赏
  • 举报
回复
好像null是用来表达空的引用类型的,结构是值类型不能使用null来替代.我们经常使用到的datetime就是一个结构体,你可以在它身上试一下.
Knight94 2006-07-12
  • 打赏
  • 举报
回复
to 现在调用这个过程的时候info是不需要赋予初始值的,那么传递参数的时候应该如何传递?

与上面所说的做法类似
Knight94 2006-07-12
  • 打赏
  • 举报
回复
to 2.返回类型为结构体的函数,如果返回的是空的结构,应该如何返回?如下:

用struct定义的变量不能用null返回,你可以增加一个字段来表明此结构体是否为有效。
Knight94 2006-07-12
  • 打赏
  • 举报
回复
to 1.结构体到底要不要用new初始化?看到有书说不要,但是在C# 2005中如果没有初始化编译的时候就会报错的,提示未赋值的变量,必须初始化一下;

结构体需要初始化才能用,这是c#编译的时候加上的,但是对于结构体的初始化不一定用new。
mmens 2006-07-12
  • 打赏
  • 举报
回复
1.结构体到底要不要用new初始化?
2.返回类型为结构体的函数,如果返回的是空的结构,应该如何返回?
3.与2类似,只不过是一个函数:
public void Save(int i,MultiInfo info)
{
}
现在调用这个过程的时候info是不需要赋予初始值的,那么传递参数的时候应该如何传递?
用Save(3,null)是不行的,已经试过了。

-------------------------------------------------------------

1. 类型都需要new.只不过基本类型赋值时就已经new了,只不过没有显示表现出来。

2. 一般的做法都是new一个返回。
可以在调用端判断这个返回值是不是什么都没有赋值。或者添加其他返回参数用来判断是否操作正确。

3. 不能写null,必须赋值。哪怕在调用端new一个。可以在处理中不使用它就可以了。如果需要判断需不需要使用,那么你就得再添加参数了。
nicch 2006-07-12
  • 打赏
  • 举报
回复
。。急用啊各位。。卡住了。。
欧姆龙FINS(工厂集成网络系统)协议是专为该公司自动化设备间数据交互而设计的网络通信标准。该协议构建于TCP/IP基础之上,允许用户借助常规网络接口执行远程监控、程序编写及信息传输任务。本文档所附的“欧ronFins.zip”压缩包提供了基于C与C++语言开发的FINS协议实现代码库,旨在协助开发人员便捷地建立与欧姆龙可编程逻辑控制器的通信连接。 FINS协议的消息框架由指令头部、地址字段、操作代码及数据区段构成。指令头部用于声明消息类别与长度信息;地址字段明确目标设备所处的网络位置与节点标识;操作代码定义了具体的通信行为,例如数据读取、写入或控制器指令执行;数据区段则承载实际交互的信息内容。 在采用C或C++语言实施FINS协议时,需重点关注以下技术环节: 1. **网络参数设置**:建立与欧姆龙可编程逻辑控制器的通信前,必须获取控制器的网络地址、子网划分参数及路由网关地址,这些配置信息通常记载于设备技术手册或系统设置界面。 2. **通信链路建立**:通过套接字编程技术创建TCP连接至控制器。该过程涉及初始化套接字实例、绑定本地通信端口,并向控制器网络地址发起连接请求。 3. **协议报文构建**:依据操作代码与目标功能构造符合规范的FINS协议数据单元。例如执行输入寄存器读取操作时,需准确配置对应的操作代码与存储器地址参数。 4. **数据格式转换**:协议通信过程中需进行二进制数据的编码与解码处理,包括将控制器的位状态信息或数值参数转换为字节序列进行传输,并在接收端执行逆向解析。 5. **异常状况处理**:完善应对通信过程中可能出现的各类异常情况,包括连接建立失败、响应超时及错误状态码返回等问题的处理机制。 6. **数据传输管理**:运用数据发送与接收函数完成信息交换。需注意FINS协议可能涉及数据包的分割传输与重组机制,因单个协议报文可能被拆分为多个TCP数据段进行传送。 7. **响应信息解析**:接收到控制器返回的数据后,需对FINS响应报文进行结构化解析,以确认操作执行状态并提取有效返回数据。 在代码资源包中,通常包含以下组成部分:展示连接建立与数据读写操作的示范程序;实现协议报文构建、传输接收及解析功能的源代码文件;说明库函数调用方式与接口规范的指导文档;用于验证功能完整性的测试案例。开发人员可通过研究这些材料掌握如何将FINS协议集成至实际项目中,从而实现与欧姆龙可编程逻辑控制器的高效可靠通信。在工程实践中,还需综合考虑网络环境稳定性、通信速率优化及故障恢复机制等要素,以确保整个控制系统的持续可靠运行。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧