C#中有没有使方法返回只读对象?
C++里可以有这样的函数
public const Type1 Func()
{
//.....
}
C#里有没有办法让函数返回的对象只读呢?
问题点数:20、回复次数:23Top
1 楼mba9001(两年不见,csdn变肥了)回复于 2005-06-03 00:32:43 得分 0
c# 也有const,还有ReadOnly关键字Top
2 楼ljc_zy(彷徨)回复于 2005-06-03 07:59:07 得分 0
readonlyTop
3 楼lyb_abiandbel(专注于OO分析与设计)回复于 2005-06-03 08:29:56 得分 0
对啊,用readonly。Top
4 楼terryfjh()回复于 2005-06-04 00:27:38 得分 0
我指的是方法里面new出来的对象,不是类的成员Top
5 楼terryfjh()回复于 2005-06-04 20:22:58 得分 0
upTop
6 楼redmoonmoon(阿卓)回复于 2005-06-04 20:56:06 得分 0
学习Top
7 楼terryfjh()回复于 2005-06-12 21:43:46 得分 0
upTop
8 楼Yamir2004(学习中..说错了别骂人,多指点..)回复于 2005-06-12 21:47:34 得分 0
访问器吧
get,set
的那个东西Top
9 楼terryfjh()回复于 2005-06-13 22:58:34 得分 0
class Point
{
public:
int X;
int Y;
const int GetX()
{
X++;
return X;
}
}
能把这个c++类翻成c#吗?Top
10 楼Yamir2004(学习中..说错了别骂人,多指点..)回复于 2005-06-14 10:07:19 得分 0
public int X
{
private int x;
get
{
x++;
return x;
}
}
Top
11 楼liduke(天下有雪)回复于 2005-06-14 10:12:23 得分 0
public Object ObjectA
{
get
{ return ....}
}
Top
12 楼terryfjh()回复于 2005-06-19 00:04:05 得分 0
不好意思,我可能没把例子写清楚,其实我的本意是:
class Line;
class Point
{
private:
Line l;
public:
const Line GetLine()
{
return l;
}
}
如果用户调用GetLine(),他将得到一个常量的Line对象,只能读不能改。
而在C#中如果用get属性方法如果返回一个引用型的对象,有没有办法让用户不能改变这个对象呢?
Top
13 楼MyNameEPC(MyName)回复于 2005-06-19 00:26:05 得分 0
返回这个对象的拷贝。Top
14 楼lordych()回复于 2005-06-19 02:16:18 得分 0
没有c++的等价方法,因为c++的const用法本来就很模糊,什么是定值,其引用的对象改变了算不算?
所以c#有它自己的语法系统。Top
15 楼terryfjh()回复于 2005-06-20 10:07:44 得分 0
To lordych()
----什么是定值,其引用的对象改变了算不算?
如果一个变量声明为const的,那么这个变量不能改变,仅此而已。。。。。
Top
16 楼jetxia(Thinking->Asking&Studying->Doing)回复于 2005-06-20 10:46:59 得分 0
==如果一个变量声明为const的,那么这个变量不能改变,仅此而已。。。。。
在c#中可用ReadOnly声明
class Line;
class Point
{
private:
Line l;
public:
const Line GetLine()
{
return l;
}
}
在C#中没有方法实现返回只读对象,这也是C#和C++的区别
你在需要调用方法返回只读对象时 可以用声明一个只读对象将调用方法返回只读对象初始化为其值
Top
17 楼terryfjh()回复于 2005-06-22 13:16:34 得分 0
to jetxia(Thinking&Asking&Studying):
偶比较笨,请您能不能把以下C++代码写成C#
class Line;
class Point
{
private:
Line l;
public:
const Line GetLine()
{
return l;
}
}
Top
18 楼terryfjh()回复于 2005-06-27 22:54:27 得分 0
upTop
19 楼tiaoci(我挑刺,我快乐)回复于 2005-06-28 09:20:32 得分 0
实现一个Readonly的 Type1
Top
20 楼tiaoci(我挑刺,我快乐)回复于 2005-06-28 09:26:48 得分 15
public class Line
{
public virtual int X{ get {...} set{...} };
public virtual int Y{ get {...} set{...} };
}
然后实现一个ReadOnly的Line
private class ReadOnlyLine : Line
{
public ReadOnlyLine(Line line) {base.x =x; base.y=y;}
public override int X{ get {...} set{ throw new ReadOnlyException(); }};
public override int Y{ get {...} set{ throw new ReadOnlyException(); }};
}
在你要返回只读的Line的地方
public Line GetLine()
{
Line = returnLine;
return new ReadOnlyLine(returnLine);
}
基本上就这样,可能代码中有些笔误,自己领会吧 :)
Top
21 楼tiaoci(我挑刺,我快乐)回复于 2005-06-28 09:28:28 得分 0
我知道MS在需要Readonly的地方就是这么做的
所以这是唯一正确的方法, 虽然有些复杂
Top
22 楼terryfjh()回复于 2005-06-28 23:38:22 得分 0
这么麻烦呀Top
23 楼lordych()回复于 2005-06-28 23:44:59 得分 5
准确的说c#中无法完成此功能,c++这个功能本来就是模糊的。Top




