C#如何定义过程时能返回参数信息

山东蓝鸟贵薪 2011-08-20 05:56:11
C#如何定义过程时能返回参数信息
控件组名:SSS001.text SSS002.text SSS003.text SSS004.text
原过程如下:
private void ReadSSS0001234() //读取信息
{
this.SSS001.Text = ReadIni("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
this.SSS002.Text = ReadIni("ZhouGX_SQLDB", "SERVERSYSD", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
this.SSS003.Text = ReadIni("ZhouGX_SQLDB", "SERVERUSER", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
this.SSS004.Text = ReadIni("ZhouGX_SQLDB", "SERVERPASS", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
}
我现在想定义一个类,将将这上列信息定义如下:
public static void ReadSSS00001234(string SSS001, string SSS002, string SSS003, string SSS004) //读取信息
{ //读取参数,并返回到相应控件中
SSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
SSS002 = ReadIni1("ZhouGX_SQLDB", "SERVERSYSD", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
SSS003 = ReadIni1("ZhouGX_SQLDB", "SERVERUSER", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
SSS004 = ReadIni1("ZhouGX_SQLDB", "SERVERPASS", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
}
...全文
351 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
山东蓝鸟贵薪 2011-08-23
  • 打赏
  • 举报
回复
呵呵找到了,写成如下:
this.SSS001.Text = FrmDBCon.ReadSSS00001234("SSS001");
就可以,谢谢各位顶力相助
山东蓝鸟贵薪 2011-08-23
  • 打赏
  • 举报
回复
是这个意思??????????
this.SSS001.Text = FrmDBCon.ReadSSS00001234("SERVERHOST");
this.SSS002.Text = FrmDBCon.ReadSSS00001234("SERVERSYSD");
this.SSS003.Text = FrmDBCon.ReadSSS00001234("SERVERUSER");
this.SSS004.Text = FrmDBCon.ReadSSS00001234("SERVERPASS");
山东蓝鸟贵薪 2011-08-23
  • 打赏
  • 举报
回复
//调用
this.SSS001.Text=ReadSSS00001234(this.SSS001.Name);
this.SSS002.Text=ReadSSS00001234(this.SSS002.Name);
this.SSS003.Text=ReadSSS00001234(this.SSS003.Name);
this.SSS004.Text=ReadSSS00001234(this.SSS004.Name);

这个地方有点问题呀,信息没有“反回”
cs302dn 2011-08-23
  • 打赏
  • 举报
回复
看看先
Alexander 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 sgzhou12345 的回复:]

public static IList<string> ReadSSS00001234()
{
string OutSSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS002 = ReadIni1("ZhouGX_SQLDB",……
[/Quote]
有两种解决方法:
其一是用21楼的方案,把控件当参数传进去,在函数内部处理,而不必强调是函数返回的。

public static void ReadSSS00001234(TextBox t1,TextBox t2,TextBox t3.TextBox t4)
{
string OutSSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS002 = ReadIni1("ZhouGX_SQLDB", "SERVERSYSD", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS003 = ReadIni1("ZhouGX_SQLDB", "SERVERUSER", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS004 = ReadIni1("ZhouGX_SQLDB", "SERVERPASS", string.Format(@"{0}\ConfigDB.ini", ""));
t1.Text=OutSSS001;
t2.Text=OutSSS002;
t3.Text=OutSSS003;
t4.Text=OutSSS004;
}

//调用:
ReadSSS00001234(this.SSS001,this.SSS002,this.SSS003,this.SSS004);

注:一般这样写的原因是ReadSSS00001234方法与几个控件不在一个对象内,函数内部不能直接取到控件对象。如果函数内部是可以直接读取控件对象的话则可以这样写:

public static void ReadSSS00001234(TextBox t1,TextBox t2,TextBox t3.TextBox t4)
{
string OutSSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS002 = ReadIni1("ZhouGX_SQLDB", "SERVERSYSD", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS003 = ReadIni1("ZhouGX_SQLDB", "SERVERUSER", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS004 = ReadIni1("ZhouGX_SQLDB", "SERVERPASS", string.Format(@"{0}\ConfigDB.ini", ""));
this.SSS0001.Text=OutSSS001;
this.SSS0002.Text=OutSSS002;
this.SSS0003.Text=OutSSS003;
this.SSS0004.Text=OutSSS004;
}

如果LZ的需求是一定要通过返回值赋给控件的话。由于函数的返回值只能是单值,LZ需要通过参数告诉函数要读取的是哪一个字符串。例如,我们通过控件的名称告诉函数我们要的是那个字符串:

public static string ReadSSS00001234(string boxName)
{
string key="";

switch(boxName)
{
case "SSS001":
key="SERVERHOST";
break;
case "SSS002":
key="SERVERSYSD";
break;
case "SSS003":
key="SERVERUSER";
break;
case "SSS004":
key="SERVERPASS";
break;
}

return (ReadIni1("ZhouGX_SQLDB", key, string.Format(@"{0}\ConfigDB.ini", "")));
}

//调用
this.SSS001.Text=ReadSSS00001234(this.SSS001.Name);
this.SSS002.Text=ReadSSS00001234(this.SSS002.Name);
this.SSS003.Text=ReadSSS00001234(this.SSS003.Name);
this.SSS004.Text=ReadSSS00001234(this.SSS004.Name);
Alexander 2011-08-22
  • 打赏
  • 举报
回复
如果是想把多个值作为返回值的话,抱歉,C#是不支持多返回值的。(貌似我接触过的编程语言还没有支持多值返回的……)

想要返回多个值的话只能使用替代方法,比较常用的是拼一个数组或者与数组等价的集合类再返回。


public static string[] ReadSSS00001234()
{
string OutSSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS002 = ReadIni1("ZhouGX_SQLDB", "SERVERSYSD", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS003 = ReadIni1("ZhouGX_SQLDB", "SERVERUSER", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS004 = ReadIni1("ZhouGX_SQLDB", "SERVERPASS", string.Format(@"{0}\ConfigDB.ini", ""));
//现在就是在这个地方,如何实现多个参数“返回” ?????????
string[] ret = new string[4];

ret[0] = OutSSS001;
ret[1] = OutSSS002;
ret[2] = OutSSS003;
ret[3] = OutSSS004;

return (ret);
}

public static void Test()
{
string[] s;

s = ReadSSS00001234();

for (int i = 0; i < s.Length; i++)
Console.WriteLine(s[i]);
}

//-------------------------或者--------------------------
public static IList<string> ReadSSS00001234()
{
string OutSSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS002 = ReadIni1("ZhouGX_SQLDB", "SERVERSYSD", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS003 = ReadIni1("ZhouGX_SQLDB", "SERVERUSER", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS004 = ReadIni1("ZhouGX_SQLDB", "SERVERPASS", string.Format(@"{0}\ConfigDB.ini", ""));
//现在就是在这个地方,如何实现多个参数“返回” ?????????
IList<string> list = new List<string>();

list.Add(OutSSS001);
list.Add(OutSSS002);
list.Add(OutSSS003);
list.Add(OutSSS004);

return (list);
}

public static void Test()
{
IList<string> s;

s = ReadSSS00001234();

for (int i = 0; i < s.Count; i++)
Console.WriteLine(s[i]);
}
Alexander 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 sgzhou12345 的回复:]

public static void ReadSSS00001234(string OutSSS001,out string OutSSS002,out string OutSSS003,out string OutSSS004) //读取信息
{ //读取参数,并返回到相应控件中
OutSSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", ……
[/Quote]

首先,纠正LZ一个概念上的误区:
C#很多概念是继承自C/C++的,它们没有“过程”这一概念,而是把“过程”与“函数”统一为一个概念了。(这点是和Pascal、Dephi等不同的)

像上面的函数ReadSSS00001234,如果有返回值的话,就和Pascal里的函数等价。如果无返回值(void),即为Pascal里的“过程”。

LZ的问题应该是多值返回的问题,一种解决方案就是在参数前加ref或out修饰符(就像LZ上面写的一样):

public static void ReadSSS00001234(out string OutSSS001,out string OutSSS002,out string OutSSS003,out string OutSSS004)
{
OutSSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
OutSSS002 = ReadIni1("ZhouGX_SQLDB", "SERVERSYSD", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
OutSSS003 = ReadIni1("ZhouGX_SQLDB", "SERVERUSER", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
OutSSS004 = ReadIni1("ZhouGX_SQLDB", "SERVERPASS", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
}

//调用方法
public static void Test()
{
string[] s = new string[4];

ReadSSS00001234(out s[0],out s[1],out s[2],out s[3]);

for (int i = 0; i < 4; i++)
Console.WriteLine(s[i]);
}
salecn 2011-08-22
  • 打赏
  • 举报
回复
来学习一下,呵呵!
LeeGang 2011-08-22
  • 打赏
  • 举报
回复
我大概明白了,不知道你要的是不是这样的结果

public static void ReadSSS00001234(textbox OutSSS001,textbox OutSSS002,textbox OutSSS003,textbox OutSSS004) //读取信息
{
OutSSS001.Text="XXXX";
OutSSS002.Text="XXXX";
.....
}
山东蓝鸟贵薪 2011-08-22
  • 打赏
  • 举报
回复
sp1234你好,还是仔细看看我的#26楼,所说的问题吧谢谢了
山东蓝鸟贵薪 2011-08-22
  • 打赏
  • 举报
回复
你没明白我的意思呀,我是通过过程将参数读取,并传递到相应的控件中
  • 打赏
  • 举报
回复
[Quote=引用楼主 sgzhou12345 的回复:]
我现在想定义一个类,将将这上列信息定义如下:
public static void ReadSSS00001234(string SSS001, string SSS002, string SSS003, string SSS004) //读取信息[/Quote]

晕!那些是控件,你搞什么string呢?

不重视按照对象类型来设计,你就自己给自己找了很多麻烦。这个问题貌似很累,但是只是你一个人累而已。它原本是非常简单、不应该耽误1分钟思考时间的东西,只要你有尊重和面向对象的类型来设计的习惯就好了。
山东蓝鸟贵薪 2011-08-22
  • 打赏
  • 举报
回复
suwei2002 各位高手还请多多赐教
山东蓝鸟贵薪 2011-08-22
  • 打赏
  • 举报
回复
public static IList<string> ReadSSS00001234()
{
string OutSSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS002 = ReadIni1("ZhouGX_SQLDB", "SERVERSYSD", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS003 = ReadIni1("ZhouGX_SQLDB", "SERVERUSER", string.Format(@"{0}\ConfigDB.ini", ""));
string OutSSS004 = ReadIni1("ZhouGX_SQLDB", "SERVERPASS", string.Format(@"{0}\ConfigDB.ini", ""));
//现在就是在这个地方,如何实现多个参数“返回” ?????????
IList<string> list = new List<string>();

list.Add(OutSSS001);
list.Add(OutSSS002);
list.Add(OutSSS003);
list.Add(OutSSS004);

return (list);
}


suwei2002你好,这个方法是可行的,但是“返回信息”时,最好能
返回到相应的控件中,相应的操作名称如下:
this.SSS001.Text
this.SSS002.Text
this.SSS003.Text
this.SSS004.Text
这个如何实现
山东蓝鸟贵薪 2011-08-21
  • 打赏
  • 举报
回复
这个是类中的过程
定义一个类,代码定义如下:
public static void ReadSSS00001234(string SSS001, string SSS002, string SSS003, string SSS004) //读取信息
{ //读取参数,并返回到相应控件中
SSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
SSS002 = ReadIni1("ZhouGX_SQLDB", "SERVERSYSD", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
SSS003 = ReadIni1("ZhouGX_SQLDB", "SERVERUSER", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
SSS004 = ReadIni1("ZhouGX_SQLDB", "SERVERPASS", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
}
山东蓝鸟贵薪 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 suwei2002 的回复:]
引用 10 楼 sgzhou12345 的回复:

我想通过过程,将这个信息读取再返回到相关的控件中
我现在想定义一个类,将将这上列信息定义如下:
public static void ReadSSS00001234(string SSS001, string SSS002, string SSS003, string SSS004) //读取信息
{ //读取参数,并返回到相应控件中
……
[/Quote]
我的意思是引用那个过程时ReadSSS00001234如何才能得到这个
this.SSS001.Text=SSS001
this.SSS002.Text=SSS002
this.SSS003.Text=SSS003
this.SSS004.Text=SSS004
呀????????????????
qingYun1029 2011-08-21
  • 打赏
  • 举报
回复
Alexander 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sgzhou12345 的回复:]

我想通过过程,将这个信息读取再返回到相关的控件中
我现在想定义一个类,将将这上列信息定义如下:
public static void ReadSSS00001234(string SSS001, string SSS002, string SSS003, string SSS004) //读取信息
{ //读取参数,并返回到相应控件中
SSS001 = ReadIni1("ZhouGX_……
[/Quote]
就是这样呀,

this.SSS001.Text=SSS001
this.SSS002.Text=SSS002
this.SSS003.Text=SSS003
this.SSS004.Text=SSS004

SSS001-SSS004分别为对应控件的Name
山东蓝鸟贵薪 2011-08-21
  • 打赏
  • 举报
回复
不会吧,说点有技术含量的呀????????
山东蓝鸟贵薪 2011-08-21
  • 打赏
  • 举报
回复
public static void ReadSSS00001234(string OutSSS001,out string OutSSS002,out string OutSSS003,out string OutSSS004) //读取信息
{ //读取参数,并返回到相应控件中
OutSSS001 = ReadIni1("ZhouGX_SQLDB", "SERVERHOST", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
OutSSS002 = ReadIni1("ZhouGX_SQLDB", "SERVERSYSD", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
OutSSS003 = ReadIni1("ZhouGX_SQLDB", "SERVERUSER", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
OutSSS004 = ReadIni1("ZhouGX_SQLDB", "SERVERPASS", string.Format(@"{0}\ConfigDB.ini", Application.StartupPath));
//现在就是在这个地方,如何实现多个参数“返回” ?????????
}
加载更多回复(14)
[14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 读核感悟 Linux内核启动 BIOS 5 读核感悟 Linux内核启动 setup辅助程序 6 读核感悟 Linux内核启动 内核解压缩 8 读核感悟 Linux内核启动 开启页面映射 9 读核感悟 Linux内核启动 链接脚本 11 读核感悟 伪装现场 系统调用参数 13 读核感悟 伪装现场 fork 系统调用 15 读核感悟 伪装现场 内核线程: 17 读核感悟 伪装现场 信号通信 19 读核感悟 kbuild系统 内核模块的编译 22 读核感悟 kbuild系统 编译到内核和编译成模块的区别 24 读核感悟 kbuild系统 make bzImage的过程 26 读核感悟 kbuild系统 make menuconfig 31 读核感悟 文件系统 用C来实现面向对象 32 读核感悟 设计模式 用C来实现虚函数表和多态 32 读核感悟 设计模式 用C来实现继承和模板 33 读核感悟 设计模式 文件系统和设备的继承和接口 34 读核感悟 设计模式 文件系统与抽象工厂 36 读核感悟 阅读源代码技巧 查找定义 37 读核感悟 阅读源代码技巧 变量命名规则 42 读核感悟 内存管理 内核中的页表映射总结 43 读核感悟 健壮的代码 exception table 内核中的刑事档案 44 读核感悟 定时器 巧妙的定时器算法 45 读核感悟 内存管理 page fault处理流程 45 读核感悟 文件读写 select实现原理 47 读核感悟 文件读写 poll的实现原理 49 1 功能介绍: 49 2 关键的结构体: 49 3 poll的实现 49 4 性能分析: 50 读核感悟 文件读写 epoll的实现原理 50 1 功能介绍 50 2 关键结构体: 51 3 epoll create的实现 53 4 epoll ctl的实现 53 5 epoll wait的实现 54 6 性能分析 54 读核感悟 同步问题 同步问题概述 55 1 同步问题的产生背景 55 2 内核态与用户态的区别 55 读核感悟 同步问题 内核态自旋锁的实现 56 1自旋锁的总述 56 2非抢占式的自旋锁 56 3 锁的释放 57 4 与用户态的自旋锁的比较 57 5 总结 58 读核感悟 内存管理 free命令详解 58 读核感悟 文件读写 2 6 9内核中的AIO 59 1 AIO概述 59 2 内核态AIO的使用 61 读核感悟 文件读写 内核态AIO相关结构体 61 1 内核态AIO操作相关信息 61 2 AIO上下文: 63 3 AIO ring 63 4 异步I O事件的返回信息 64 读核感悟 文件读写 内核态AIO创建和提交操作 65 1 AIO上下文的创建 io setup 65 2 AIO请求的提交:io submit实现机制 66 读核感悟 文件操作 AIO操作的执行 66 1 在提交时执行AIO 66 2 在工作队列中执行AIO 66 3 负责AIO执行的核心函数aio run iocb 67 4 AIO操作的完成 67 读核感悟 文件读写 内核态是否支持非direct I O方式的AIO 67 已上传7本: [14本经典Android开发教程] 1 Android开发从入门到精通 http: download csdn net detail cleopard 8355245 [14本经典Android开发教程] 2 Android开发手册 API函数详解 http: download csdn net detail cleopard 8374487 [14本经典Android开发教程] 3 Android SDK 中文开发文档 http: download csdn net detail cleopard 8380429 [14本经典Android开发教程] 4 Android应用程序开发36技 http: download csdn net detail cleopard 8380495 [14本经典Android开发教程] 5 linux Android基础知识总结 http: download csdn net detail cleopard 8380529 [14本经典Android开发教程] 6 Android驱动开发入门及手机案例开发分析教程 http: download csdn net detail cleopard 8388019 [14本经典Android开发教程] 7 Android编程入门教程 http: download csdn net detail cleopard 8388043 剩余8本稍后上传 @或直接从这里寻找@ http: download csdn net user cleopard album @更多@ http: cleopard download csdn net 福利 http: xuemeilaile com 17份软件测试文档 http: download csdn net album detail 1425 13份WPF经典开发教程 http: download csdn net album detail 1115 C#资料合辑二[C#桌面编程入门篇] http: download csdn net album detail 957 C#资料合辑一[C#入门篇] http: download csdn net album detail 669 [Csharp高级编程 第6版 ] 共8压缩卷 http: download csdn net album detail 667 10个[精品资源]Java学习资料合辑[一] http: download csdn net album detail 663 10个C#Socket编程代码示例 http: download csdn net album detail 631 6份GDI+程序设计资源整合[全零分] http: download csdn net album detail 625 2014年移动游戏行业数据分析 http: download csdn net detail cleopard 8340331 一文读懂2014年全球互联网广告新生态 http: download csdn net detail cleopard 8340303">[14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核 [更多]

110,577

社区成员

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

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

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