关于c#语言的几个小问题?容易得很。

brallow 2003-05-12 10:46:25
问题全部来自《c#高级编程》
1:据说在同一个scope内不能有两个同名的变量,也就是说全局变量和局部变量也不能重名啦?确认或者有高手深入解释一下;
2:依据书上说c#为强类型语言也就是说声明为何类型就是什么类型啦?
那在CLS中有sbyte short int long byte ushort uint ulong
申明为long d=123L有什么意义么?难道编译器器回搞成int类型?也就是问U L UL M这些后缀有什么用?好象有话蛇添足之嫌啊?

另外我看了大概100页,我估计英文原版一定不错,但是翻译的质量就不行吧?有一些句子显然没有经过推敲,有些翻译的很直接。不过我觉得还是一本值得买的好书。
...全文
31 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArLi2003 2003-05-14
  • 打赏
  • 举报
回复
(long)123 和123L 并不一样,在分配空间时就不同,

(long)123 先声明123 为int 的存储空间,然后再转成long 付给前面的变量

通常这种转换(叫显式转换)用于变量,比如

int i=0;
long i1=(long)i; //这用 long i1=iL 就这样加个L可不行哟
Knight94 2003-05-13
  • 打赏
  • 举报
回复
To 1:据说在同一个scope内不能有两个同名的变量,也就是说全局变量和局部变量也不能重名T啦?确认或者有高手深入解释一下;

在同一范围内是不允许崇明的,但是全局变量和局部变量是允许重名的(但不建议这样做,防止连自己都搞混淆了)

2:依据书上说c#为强类型语言也就是说声明为何类型就是什么类型啦?
那在CLS中有sbyte short int long byte ushort uint ulong
申明为long d=123L有什么意义么?难道编译器器回搞成int类型?也就是问U L UL M这些后缀有什么用?好象有话蛇添足之嫌啊?

为了所使用变量的类型清晰化。
ArLi2003 2003-05-13
  • 打赏
  • 举报
回复
问题全部来自《c#高级编程》
1:据说在同一个scope内不能有两个同名的变量,也就是说全局变量和局部变量也不能重名啦?确认或者有高手深入解释一下;

》》》
如果儿子叫小明,孙子也叫小明,那你如果用 iSex = 小明.性别; 这样引用就会出现问题,你是要引用儿子还是孙子

所以如果上一级变量名已经存在,则子级都不能再使用该变量名。。

2:依据书上说c#为强类型语言也就是说声明为何类型就是什么类型啦?
那在CLS中有sbyte short int long byte ushort uint ulong
申明为long d=123L有什么意义么?难道编译器器回搞成int类型?也就是问U L UL M这些后缀有什么用?好象有话蛇添足之嫌啊?

》》》
简单的说 d =123 那么你说123 是int 型还是long 型?在后面加外 L 就是显式的声明它为long 型,并不是话蛇添足。。它可以让你、其它人、编译器都知道该值是什么型,并将之用在的场合

3:另外我看了大概100页,我估计英文原版一定不错,但是翻译的质量就不行吧?有一些句子显然没有经过推敲,有些翻译的很直接。不过我觉得还是一本值得买的好书。

》》》
的确是好书,我就是靠它学会的c# 翻译上有些地方有错误但并不是很重要,可以理解的,另外如果是电子版最好要有它的源程序
wxjUN 2003-05-13
  • 打赏
  • 举报
回复
多看几遍,就会理解了,努力哦!
skywang0810 2003-05-13
  • 打赏
  • 举报
回复
这种方式如123L能够代替(long)123么?如果可以的话就算是一种简洁方式.但是书中没有提到啊?
// 我觉得上面这种提法绝对是可行的
sinsns 2003-05-13
  • 打赏
  • 举报
回复
楼主大白痴,这么白痴的问题也问!有病!病入盲膏,嘻嘻!
brallow 2003-05-13
  • 打赏
  • 举报
回复
呵呵,学到了不少的东西,但是我觉得好象有不同意见嘛?
1:关于第一个问题,有两种不同的答案啊?全局变量和局部变量到底可不可以重名?如果不可以的话?这样做有什么很大的好处么?我觉得C和C++中自己覆盖的原则很好理解,也很方便应用,为何要使用这一个原则呢?我差不多已经理解了关于作用域的问题,主要是想理解这种变化的实质和理由.

2:关于第二个问题我说的意思是说:书中有一个例子就是这样的long d=123L这样有什么意义呢?根本没有嘛.c#不允许未声明和初使化的变量.不管是在赋值还是在其它过程当中最终一定要和左值的类型相同才行对吧?这种方式如123L能够代替(long)123么?如果可以的话就算是一种简洁方式.但是书中没有提到啊?

ying39 2003-05-12
  • 打赏
  • 举报
回复
第一个问题是不是说作用域的问题 ?如果是关于作用域的话是这样子的:内外作用域是相对的,在内部作用域声明变量且此变量名与外部作用域中的某个变量同名是错误的,因为这样会赋予外部作用域变量不同的意思。
但如果在同一块中的两个块中声明两个同名变量的话,虽然容易混淆但是却是可行的。
第二个问题强类型化语言是因为c#中的类型丰富,通常在同一个语句中会适用到多种类型的值,c#为此定义了一定的兼容原则,编译器通过报告错误和警告,强制程序适用这些原则,简称类型检查。三个典型的例子,都用来确保不同类型的值能够正常的一起工作:1赋值语句,2方法调用时候的参数类型。3表达式。c#典型的实现这一原则的就如:隐式转换。所以说强类型语言的含义应该不是说声明为何类型就是什么类型。
关于CTS中声明的后缀。我想在赋值里用好像是没必要吧。需要加上后缀的是如字面值,如程序(a+3)*b这里面3就是字面值了吧。字面值与变量不同,字面值的值不能改变。比如72U,则编译器会根据范围选择UNIT或者ULONG中的一种。如果后缀为UL则编译器肯定选择为ULONG类型。
====================================
以上是我个人的想法,我也刚开始学C#,感觉有很多概念不很清楚。

110,567

社区成员

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

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

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