c#中的各种符号解释整理【不断更新中】

归类于C# 参与评论

单个符号

由于在C#中这些符号不仅单用,还有各种组合使用情况,因此这里首先介绍它们单用的情况。

1. ~

逐位求反,例如: ~1=0,~0=1,~00010=11101;

另一种解释:按位求补符。这个符号可能比较少见,不过它确实很有用。1的32位表示为0000 0000 0000 0000 0000 0000 0000 0001,那么int a=~1实际为-2,即1111 1111 1111 1111 1111 1111 1111 1110。另外,~在List的BinarySearch中将会使你的操作方便很多。在这个二分查找的实现中,如果查找的元素不在集合中,它会返回一个负值,技巧就在这里,这个数的求补结果是下一个比查找元素大的元素的位置,如果没有更大的元素,那么它表示元素总数。这个技巧使得我们在插入新的元素的时候方便很多。

 

以下为引用的内容:

static void main()
{
List<string> list = new List<string>();
int search;
list.Add(“public”);
list.Add(“protected”);
list.Add(“private”);
list.Sort();
search = list.BinarySearch(“protected internal”);
if (search < 0)
{
list.Insert(~search, “protected internal”);
}
foreach (string accessModifier in list)
{
Console.WriteLine(accessModifier);
}
}

输出结果为:

private protected protected internal public

2. !,@,#和$

!非逻辑运算符,这里不多讲。@常用在字符串开头,它可以告诉编译器忽略转义符,从而可以很方便的将一些特殊字符按用户表达意愿输出,另外在Aspx.Net中这个字符常和其他字符混合使用。#和$微软暂时没盯上(当然如果你觉得C#用到了#的话也行)。不过$符号相信很多人都熟悉,大名鼎鼎的JQuery使得这个符号处处可见,不过不保证以后微软也插上一脚。一下是$符号在js中的意思:

1、首先可以用来表示变量,
比如变量 var s=’asdsd’或var $s=’asdasd’;
2、在正则表达式中,它可以匹配结尾
/sa$/.test(string)
匹配string字符串中的sa,比如string=’125sa’则匹配,string=’125sa21′则不匹配
正则表达式很复杂,这里只是简单的说说。
3、由于受prototype.js(老外写的框架,用于将一些常用的函数封装,方便操作)的影响,
现在很多人都用 $来表示一个查找对象的函数,
$=function (id) { return (typeof (id)==’object’)?id:document.getElementById(id); };
其实就是一个自定义函数,用$只是简单,其实用其它字符也是一样的,
f=function (id) { return (typeof (id)==’object’)?id:document.getElementById(id); };也可以
其中参数id是html文档中的id,
比如<div id=’ss’></div>
则obj=$(‘ss’)就是引用的这个id=’ss’的对象

 

4.%,^,&,*,(),-,+,=,{},|和\

这些符号基本都是常见符号符号,因此这里也只做简单解释。%是求余运算符,^是异或位运算符,&则是按位与运算符,另外|是按位或运算符。*既可以用作乘法符号,还可以表示为指针。()和{}用于对象中,前者一方面表示函数参数区域,另一方面在强制类型转换时表示把一种类型强制转换为括号中的类型,除此,它还用来包裹运算部分从而制定运算优先级,后者则长表示代码片段作用域,它既可以用于指代命名空间中的有哪些类或类中包括哪些属性方法等,还可以用于在协助C#中某些特殊操作时指定其作用块,如fixed,using等等,另外在字符串格式化中,{}和数字组合表示目标字符串中待替换子串位置, e.g. String.Format(“{0} + {1}={3}”, 1,2,3)。+通常表示相加数学运算符,=则长用来表示赋值操作。另外,这些操作符可以组合来表示不同含义,后面将会详细说明这一部分。\用于转义符的开始,如\n表示换行。

5.[]

这个符号同样常见,它通常有三种使用方式,一个是用于数组中表示索引位置,一种为添加类型的特性时使用,另外它也常常和this关键字在类中配合使用来形成类索引。

以下为引用的内容:

class Some
{
int this[string item]
{
get
{
if(item==”a”)return 1;
return 0;
}
}
}

6. :,;’,”,’,<,,,>,.,/,?

:目前没有单独使用情况,后面会讲到它的组合使用,;处处可见,C#不像VB,它用;表示语句的结束。”包裹字符串,’则包裹单个字符。<和>分别为大和小的逻辑运算符,,用于分隔参数,.用于表示对象成员选择器或小数点。/则表示除以的数学运算符。?单个常用于表示可空的值类型,int? a=null,它也可以与很多字符组合使用来表示不同意义。

符号组合

好了,键盘上的符号键基本介绍完毕,在C#中,符号更为强大的一面是它们之间不同组合产生不同的意义,这里将会对此作出一些简单介绍。

1. 单个字符重复组合

这里有?和+,-,&,|,<,>以及=。??同样用于泛型中,它在值类型数据操作时非常有用,它可以在值类型为空时指定默认值,e.g. int a=someNullable??100;它表示如果someNullable不为空时则将其值赋给a,否则将100赋值给a,另外你也可以参考这篇文章。++和–表示自加或减1。&&,||和==则表示逻辑关系的且,或和相等。<<和>>则分别表示左右移位操作。最后//表示单行注释。

1. 数学运算符,位运算符,逻辑运算符和=的组合使用。

和C/C++中类似,C#通过这两种符号的组合简化了程序员在常见数学运算时的输入。如+=,-=,*=,/=,%=,还有&=,~=,|=等,它是一个数自身与某个数做相应数学操作的结果。如a+=10完整形式为:a=a+10。逻辑运算符和=则表示或的关系,如>=表示大于或等于。

2. ?和:组合

这个组合的符号不是紧挨着的,不过他们必须组合使用。这里?和:组成条件表达式,int c= a==b?a:b; 它的存在同样简化程序员代码。

3. =>组合以及<>配对

=>组合是3.0以后加入的,它也是构成Lamda表达使得部分,它使得匿名函数的书写更加简洁。通常它前面会包含有表达式参数部分,后面则是表达式的主体部分。<>则在泛型中大量使用,它用来包裹类型参数。

4. ASPX页面中的符号组合

在ASPX中组合符号很多,一般基本都是左右尖括号和其他符号组合来表示服务器端脚本代码,从而达到插入服务器代码的目的。这里仅列出一些常见符号组合。

首先<%@ 和%>用来表示ASPX 2.0的Page指令,它一般出现在页面顶部。在ASPX.NET页面或用户控件中有11个指令(注1),指令格式为:<%@ [Directive] [Attribute=Value] %>。

<%=%>用于在HTML代码中插入.NET代码片段。在Aspx.Net MVC中这个字符组合非常常见,这点类似以前的ASP,这也是有些程序员认为MVC退回到ASP时代的一个原因。

总结

符号在很多时候不仅比字符更加简洁的表达意思,而且它还更形象和直观,这也是符号在.net中出现的一个原因。不过符号并不是越多越好,所谓过犹不及,太多太复杂的符号有时候反而会让程序员产生混淆和误解。所以目前.NET中出现的符号数量并不是太多,并且未来.NET中符号应该是基本固定的。不过这并不妨碍微软在适当的时候添加一些新的,有用的符号。比如有人在展望.NET 5.0的时候曾提到目前微软推出的Vedea语言的一个很不错的特性:绑定,它的符号为:textbox.Text := slider.Value; 这意味着当Value改变的时候,Text也会相应改变。而双向绑定的语法则有所不同:textbox.Text :=: slider.Value; 相信这个新的符号如果加入到.NET中来一定会让我们的代码比以前更加方便的!同时也期待类似的能简化我们程序员并且形象,直观的新特性符号能在未来出现。


补充:

“@”

@符号是特殊而又实用的C#符号.

比如它在string中的应用.

1、字符@表示,其后的字符串是个“逐字字符串”(verbatim string). // 这个说法来自C# Primer 中文版(Stanley B. Lippman, 侯捷/陈硕合译)

2、对于逐字字符串字面变量(verbatim string literal),我们不再需要使用“转义序列”就可以指定反斜线之类的特殊字符.@的这个特点使得在表示文件路径时很方便.如:string str = @”C:Test.txt”;

3、另外一点,用@表示的字符串能够跨越数行.这数行之内的空白字符(White Space)都会保留在字符串里.这样便能允许存储和生成带有格式的文本块.本文发表于www.bianceng.cn如:string strText = @”Line1Line2Line3″;有意思的是如果在VS.NET2003中当你输入完第一行(string strText = @”Line1)换行后,光标会自动到第二行最开头 ^_^.很智能化、人性化的判断.

4、不知道大家在最初看到@的功能时有没有想,如果“转义序列”()在字符串中“失效”,那么想包含一个双引号(“),怎么办?我找到了答案.方法很简单.在双引号之前再加一个双引号即可.如:string str = @”"”Great!”"Said Allen Lee”;

5、这仅仅是@在字符串中的用法,有机会再去看看@的其他东东.

顶部