类的构造函数怎么写?

太久 2010-06-30 06:03:12

class LogEntity
{
private string _all;
private string _cs_username; //用户名
private string date;
private string time;
private string c_ip; //客户IP
private string s_sitename; //服务名
private string s_computername; //服务器名
private string s_ip; //服务器IP
private string s_port; //服务器端口
private string cs_method; //方法
private string cs_uri_stem; //URI 资源
private string cs_uri_query; //URI 查询
private string sc_status; //协议状态
private string sc_substatus; //子协议状态
private string sc_win32_status; //Win32 状态
private string sc_bytes; //发送字节
private string cs_bytes; //接受的字节数
private string time_taken; //所用时间
private string cs_vsersion; //协议版本
private string cs_host; //主机
private string user_agent; //用户代理
private string cookie; //cookie
private string referer;
}

我想要实现这样的效果:在new的时候个给上面这些赋值,传入参数个数不定,比如new LogEntity(date,user_agent)则对date,和user_agent赋值,其他的都是空字符串。没碰到过这样的情况,各位帮忙出出主意哈~先谢大家
...全文
262 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
太久 2010-07-02
  • 打赏
  • 举报
回复
谢谢各位,结贴了
allen3010 2010-07-01
  • 打赏
  • 举报
回复
学习了,看看
宇峰科技 2010-07-01
  • 打赏
  • 举报
回复
个人认为,不要传字段参数,直接传类对像作为参数,如publi fun(LogEntity le)
Baesky 2010-07-01
  • 打赏
  • 举报
回复
我的错。原来C++可以有,C#没有默认形参,抱歉!!!
kolosi 2010-07-01
  • 打赏
  • 举报
回复
多重载几个构造函数就行了。


public LogEntity(string cs_vsersion,string cs_host,string user_agent,string cookie)
{
......
}
public LogEntity(string cs_vsersion,string user_agent, string cookie)
{
......
}
public LogEntity(string cs_vsersion,string cookie)
{
......
}
Baesky 2010-07-01
  • 打赏
  • 举报
回复
就写一个构造,形参都给默认的空,然后想赋值哪个就随意赋值咯:

//Instance1:
public LogEntity(string _all = string.empty, string _cs_username = string.empty, ....)
{
this._all = all;
this._cs_username = _cs_username;
.........
}

另外一种就是楼上诸位说的传个String或者String[],如果是string自己分隔字符,string[]则方便些,不用的你给string[n] = string.empty就可以了.只是这种方法要保证参数的顺序.

//Instance2:
public LogEntity(string[] agruArray)
{
_all = agruArray[0];
....
}
aifengtouxinxin 2010-07-01
  • 打赏
  • 举报
回复
//Instance1:
public LogEntity(string _all = string.empty, string _cs_username = string.empty, ....)
{
this._all = all;
this._cs_username = _cs_username;
.........
}
304的的哥 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangxu_518 的回复:]
不知下面这种方式行不行:

C# code
public LogEntity(params string[] strArray)
{
if (null == strArray || strArray.Length <= 0) return;
_all = strArray[0] == null ? string.Empty……
[/Quote]
支持!
接下来的照此写下去就o了!
wangxu_518 2010-07-01
  • 打赏
  • 举报
回复
恩,lz的方法虽然感觉有点笨拙,但实际上还是比较可行的。
虽然也可以用结构,但是结构一般用于定值的场合,而且程序改动也可能会很大。
所以个人感觉lz的fields传的很好。没有必要改动。
太久 2010-07-01
  • 打赏
  • 举报
回复
先谢谢大家~
[Quote=引用 2 楼 wangxu_518 的回复:]

不知下面这种方式行不行:
C# code
public LogEntity(params string[] strArray)
{
if (null == strArray || strArray.Length <= 0) return;
_all = strArray[0] == null ? string.Empty : s……
[/Quote]
参数是可以传进去了,但是我传的参数和类的字段顺序没关系,而且数量也可能会少几个。
问题是解决了,可是感觉有点傻,那个构造函数又同时传了个数组,fields

public LogEntity(string[] fields,params string[] strArray)

fields是 string[] strArray 对应的名称,我是这样确认strArray[] 对应的是那个字段。
jianuMan 2010-07-01
  • 打赏
  • 举报
回复
可以传入一个String[]进来
然后依据string【】。count 依次赋值
fengboyangjinfeng 2010-06-30
  • 打赏
  • 举报
回复

public class Mgs
{
public string userName
{ get; set; }

public string toUser
{ get; set; }
.............
}单独写成一个类 不要构造函数
Mgs m=new Mgs(){"参数"};
就可以不定输入参数个数
xupeihuagudulei 2010-06-30
  • 打赏
  • 举报
回复
参数数组
fengboyangjinfeng 2010-06-30
  • 打赏
  • 举报
回复
public class Mgs
{
public string userName
{ get; set; }

public string toUser
{ get; set; }
.............
}

Mgs m=new Mgs(){"参数"};
这样可以
j40833139 2010-06-30
  • 打赏
  • 举报
回复
class LogEntity
{
private string _all;
private string _cs_username; //用户名
private string date;
private string time;
private string c_ip; //客户IP
private string s_sitename; //服务名
private string s_computername; //服务器名
private string s_ip; //服务器IP
private string s_port; //服务器端口
private string cs_method; //方法
private string cs_uri_stem; //URI 资源
private string cs_uri_query; //URI 查询
private string sc_status; //协议状态
private string sc_substatus; //子协议状态
private string sc_win32_status; //Win32 状态
private string sc_bytes; //发送字节
private string cs_bytes; //接受的字节数
private string time_taken; //所用时间
private string cs_vsersion; //协议版本
private string cs_host; //主机
private string user_agent; //用户代理
private string cookie; //cookie
private string referer;
//后面的属性直接写 我直接写构造函数
比如所有的参数是4个 cs_vsersion,cs_host,user_agent,cookie
public LogEntity(string cs_vsersion,string cs_host,string user_agent,string cookie)
{
if(!string.isnullorempty(cs_vsersion))
this.cs_vsersion=cs_vsersion;
if(!string.isnullorempty(cs_host))
this.cs_host=cs_host;
if(!string.isnullorempty(user_agent))
this.user_agent=user_agent;
if(!string.isnullorempty(cookie))
this.cookie=cookie;


}
}
//这样在调用的时候 不传的参数只需要填""就OK了。
mars199 2010-06-30
  • 打赏
  • 举报
回复
我也看看
OOAmyOO 2010-06-30
  • 打赏
  • 举报
回复
来看看
兔子-顾问 2010-06-30
  • 打赏
  • 举报
回复
刷了一下。
楼上正确

params关键字。详见MSDN

另外,如果vs2010,则可以用新特性:
默认参数命名参数
详见OJ版主的帖子
wangxu_518 2010-06-30
  • 打赏
  • 举报
回复
不知下面这种方式行不行:
public LogEntity(params string[] strArray)
{
if (null == strArray || strArray.Length <= 0) return;
_all = strArray[0] == null ? string.Empty : strArray[0];
_cs_username =
(strArray.Length < 1 || strArray[1] == null) ? string.Empty : strArray[1];
date =
(strArray.Length < 2 || strArray[2] == null) ? string.Empty : strArray[2];
}
angel6709 2010-06-30
  • 打赏
  • 举报
回复
不能。。。除非参数个数已定

110,533

社区成员

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

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

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