c#里面类成员的set可以使用不同类型么

aleyuan 2013-04-03 01:37:09
因项目特殊,所以要用C#,时间太赶,现学现用,很多地方都不太懂希望大家帮帮我。请问,我现在有

Enum TOF{ FALSE=0, TRUE=1};//这里可以用布尔型,只是举个例子说明而已

public class A{
private TOF iS;
public TOF isSuccess
{
set{ iS = value; }
}
}

这样就能在其他地方
A a = new A();
a.isSuccess = TOF.TRUE;

但是我希望同时能够用下面的两种方式
a.isSuccess = 1;

a.isSuccess = "true";
这样能不能实现,其实就是能不能重载set?(是这么说么,我想get肯定不可以返回不同类型,但set可以么)
还是只能写成
public void setIS(int i);
public void setIS(TOF i);
public void setIS(string i);
...全文
257 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
action0692 2013-04-06
  • 打赏
  • 举报
回复
第一种和第三种还有个区别: 第一种,对于get或者set的行为以后还能改,比如可以限制输入数据的范围什么的,第三种就没有这种控制了
aleyuan 2013-04-03
  • 打赏
  • 举报
回复
引用 11 楼 whiteColdSnow 的回复:
public int AutoPro { get; private set; }//可设成只读
原来如此,谢谢
whiteColdSnow 2013-04-03
  • 打赏
  • 举报
回复
public int AutoPro { get; private set; }//可设成只读
aleyuan 2013-04-03
  • 打赏
  • 举报
回复
引用 5 楼 linrachel 的回复:
第一种编译器会自动生成一个private的字段,两者在编译后没有区别,只是private字段名不同。 第三种显然违反了OO的封装性,是不推荐用法。
但我的理解是第一种和第三种是一样的,因为第一种生成的private字段,也没办法做其他操作,封装体现在哪
aleyuan 2013-04-03
  • 打赏
  • 举报
回复
引用 7 楼 wanghui0380 的回复:
哦,我看掉前提了 Enum TOF{ FALSE=0, TRUE=1} 额,你都有枚举了,还纠结个屁啊 已经有枚举的化,直接Enum.Parse TOF t1=(TOF)Enum.Parse(typeof(TOF),1.ToString()); TOF t2=(TOF)Enum.Parse(typeof(TOF),"True".ToUpper(……
Parse我知道,只是在想作为类成员变量,怎么用set统一表示
devmiao 2013-04-03
  • 打赏
  • 举报
回复
一个是使用泛型,一个是使用返回值可能类型的基类或者接口类型。比如IConvertable ICompareable或者object。
wanghui0380 2013-04-03
  • 打赏
  • 举报
回复
哦,我看掉前提了 Enum TOF{ FALSE=0, TRUE=1} 额,你都有枚举了,还纠结个屁啊 已经有枚举的化,直接Enum.Parse TOF t1=(TOF)Enum.Parse(typeof(TOF),1.ToString()); TOF t2=(TOF)Enum.Parse(typeof(TOF),"True".ToUpper());
wanghui0380 2013-04-03
  • 打赏
  • 举报
回复
你可以不重载。只用一个方法Convert.ToBoolean
bool r1 = setIC(1);
bool r2 = setIC("True");
            
   
  static bool setIC(object obj)
        {
             bool res;
             res = Convert.ToBoolean(obj);
            return res;
        }
当然这么写你的注意异常了,能转换的自然能转换,转换不了的会抛异常,因为俺们不知道你的逻辑,所以异常处理你自己看着办
linrachel 2013-04-03
  • 打赏
  • 举报
回复
第一种编译器会自动生成一个private的字段,两者在编译后没有区别,只是private字段名不同。 第三种显然违反了OO的封装性,是不推荐用法。
aleyuan 2013-04-03
  • 打赏
  • 举报
回复
引用 2 楼 gxingmin 的回复:
LZ是以前搞java的吧 这样不行的,除非你定义从object public class A { public object IS{get;set;} } A a=new A(); a.IS="true"; a.IS=1; a.IS=TOF.True; 或把A定义成泛型 public class A<T> { public……
好像有点懂了 顺便再问一下
public class A
{
public int i{get; set;}
}
public class A
{
private int m_i;
public int i{
get{return m_i;}
set{m_i=value;}
}
}
以及
public class A
{
public int i;
}
这三种写法的区别是什么
aleyuan 2013-04-03
  • 打赏
  • 举报
回复
好像有点懂了 顺便再问一下

public class A
{
public int i{get; set;}
}

public class A
{
private int m_i;
public int i{
get{return m_i;}
set{m_i=value;}
}
}
以及

public class A
{
public int i;
}
这三种写法的区别是什么
gxingmin 2013-04-03
  • 打赏
  • 举报
回复
LZ是以前搞java的吧 这样不行的,除非你定义从object public class A { public object IS{get;set;} } A a=new A(); a.IS="true"; a.IS=1; a.IS=TOF.True; 或把A定义成泛型 public class A<T> { public T IS{get;set;} } A<string> a=new A<string>(); a.IS="true"; A<int> a=new A<int>(); a.IS=1; ...
linrachel 2013-04-03
  • 打赏
  • 举报
回复
时间太赶就不要用这些语法糖,按以前的方式写,直接写Set方法。 C#的语法糖,甜到忧伤。。

110,534

社区成员

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

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

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