一、运算符
参照javase (7)java基础知识-原码、反码、补码、运算符
二、运算符2
1. checked unchecked 运算符
1.1checked 当变量溢出时不再默默溢出,而是抛出异常
int a = 1000000;
int b = 1000000;
int c = a * b;//-727379968
int d = checked(a * b);// 抛异常 System.OverflowException:“Arithmetic operation resulted in an overflow.”
Console.WriteLine(c);
checked 1.对double和float没作用,他们溢出为特殊无限值。2.对decimal类型也没作用这种类型总是进行溢出检查
1.2 unchecked
不进行溢出检查
2.is运算符
检查is左边对象是否可转换的为is右边的类型。可以则返回true
该运算符常在向下类型转换前使用,不能用于自定义类型和数值转换
class Program
{
static void Main(string[] args)
{
Program p = new Program();
if ( p is object) Console.WriteLine("True");
}
}
C#7新增功能
右边类型可以定义一个变量,该变量是左边变量转换为右边以后的类型实例
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
if (dog is Animal animal) animal.add(); //等价于 ((Animal)dog).add()//打印Dog
}
}
public class Animal {virtual public void add() { Console.WriteLine("Animal"); } }
public class Dog:Animal { override public void add() { Console.WriteLine("Dog"); } }
3.as运算符 -C#6新增
as运算符在向下类型转换出错时会返回null
static void Main(string[] args)
{
object o1 = "abc";
object o2 = 3;
string str1 = o1 as string;
Console.WriteLine("str1: "+str1);
string str2 = o2 as string;
if (str2 == null) { Console.WriteLine("str2: " + "null"); }
//string str3 = (string)o2;//抛异常 System.InvalidCastException:“Unable to cast object of type 'System.Int32' to type 'System.String'.”
}
4.sizeof运算符
5.type运算符
6.nameof运算符
class Program
{
static void Main(string[] args)
{
string str= nameof(Program.ToString);
Console.WriteLine(str);//ToString
}
}
7.index运算符
8.可空类型运算符
给不能为空的类型赋值为空
9.空合并运算符
如果??左边为空,则执行右边
class Program
{
static void Main(string[] args)
{
int? a = null;//
Console.WriteLine(a);
int? b = a ?? 10;
Console.WriteLine(b);
Console.ReadLine();
}
}
10.空条件运算符
如果变量为空时表达式不会抛出空异常,而是赋值给变量为null
string s = null;
//string str = s.ToString(); //报空异常 System.NullReferenceException:“Object reference not set to an instance of an object.”
string str2 = s?.ToString();
if(str2==null) Console.WriteLine("null");
Console.ReadLine();
三、运算符重载
四、自定义索引运算符