C#学习笔记(五)CSharp操作符-基本操作符(一)

表达式和语句都是为方法服务的。

操作符 + 操作数 组成 表达式;

表达式后面加分号;组成语句。

语句则是为了组成方法体。


操作符也叫作运算符:operator

操作数:operand


操作符不能脱离与它相关联的数据类型。

int x = 5;
int y = 4;
Console.WriteLine(x/y);   // 1

double a = 5.0;
double b = 4.0;
Console.WriteLine(a/b);      //1.25

为什么要发明运算符?

运算符是对算式的简记法简写,在编程语言中操作符的本质是函数(即算法)的简记法

有如下函数:给一个对象,创造一个足球队。其中有一个函数GetMarry。给一个对象。 

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person1 = new Person();
            Person person2 = new Person();
            person1.Name = "Deer";
            person2.Name = "Deer's wife";
            List<Person> nation = Person.GetMarry(person1, person2);
            foreach (var p in nation)
            {
                Console.WriteLine(p.Name);
            }
        }
    }
    class Person
    {
        public string Name;
        public static List<Person> GetMarry(Person p1, Person p2)
        {
            List<Person> people = new List<Person>();
            people.Add(p1);
            people.Add(p2);
            for (int i = 0; i < 11; i++)
            {
                Person child = new Person();
                child.Name = p1.Name + "&" +p2.Name + "'s child" + i;
                people.Add(child);
            }
            return people;
        }
    }
}

下面我们通过运算符来简写这部分代码:

{
    class Program
    {
        static void Main(string[] args)
        {
            Person person1 = new Person();
            Person person2 = new Person();
            person1.Name = "Deer";
            person2.Name = "Deer's wife";
            List<Person> nation = person1 + person2;
            foreach (var p in nation)
            {
                Console.WriteLine(p.Name);
            }
        }
    }
    class Person
    {
        public string Name;
        public static List<Person> operator +(Person p1, Person p2)
        {
            List<Person> people = new List<Person>();
            people.Add(p1);
            people.Add(p2);
            for (int i = 0; i < 11; i++)
            {
                Person child = new Person();
                child.Name = p1.Name + "&" +p2.Name + "'s child" + i;
                people.Add(child);
            }
            return people;
        }
    }
}

改写部分:第20行重新定义了一个运算符。在第10行中应用,效果与函数效果相同,所以运算符说是函数的简记法。


x.y运算符:成员访问操作符

1、访问外层名称空间的子集名称空间;比如:System.IO

2、访问名称空间中的类型;比如:System.IO.File

3、访问类型的静态成员;比如:System.IO.File.Create("D:\\helloWorld.txt");

4、访问对象的成员。示例如下:实例对象myForm下面的成员:属性Text和方法ShowDialog()方法。

using System.Windows.Forms;

Form myForm = new Form();
myForm.Text = "Hello,World!";
myForm.ShowDialog();

f(x):圆括号,就叫做方法调用操作符

f是方法的名称。x是方法的参数。圆括号就是方法调用操作符。

在我们调用函数方法的时候,这对圆括号是不能省的。比如如下代码:我们想要调用HelloWorld必须加上圆括号。

class Program
{
    static void Main(string[] args)
    {
        Calculator c = new Calculator();
        c.MyAdd(2.0, 3.0);
        c.HelloWorld();
    }
}
class Calculator
{
    public double MyAdd(double a, double b)
    {
        return a + b;
    }

    public void HelloWorld()
    {
        Console.WriteLine("hello World!");
    }
}

只要调用函数就必须加圆括号吗?

在Csharp中不一定。委托,我们不直接去调用这个方法,去做这件事,我们通过委托来做这事。如下:

class Program
{
    static void Main(string[] args)
    {
        Calculator c = new Calculator();
        c.MyAdd(2.0, 3.0);
        //c.HelloWorld();
        Action myAction = new Action(c.HelloWorld);// 此委托:参数为空,无返回值。
        myAction();

    }
}
class Calculator
{
    public double MyAdd(double a, double b)
    {
        return a + b;
    }

    public void HelloWorld()
    {
        Console.WriteLine("hello World!");
    }
}

委托做这事有限制:无参数,无返回。类似于Thread,传入一个函数名。但是不同的是:Thread通过Thread.Start可以出入参数。python中有类似操作。本质只是应用指向问题。

在python中有如下代码;a = functionName。a()完成函数任务。委托中Action(FunctionName)。然后Action()完成FunctionName()的功能。

def myAdd(a, b):
    return a+b


a = myAdd
print(a(3, 2))

a[i]元素访问操作符[]:方括号

int[] myIntArray = new int[]{1, 2, 3, 4 5}

其中的花括号,叫做初始化器。

元素访问修饰符除了整数索引以外,还有字典类型的字符串等类型的索引。一定放的是集合的索引。

class Program
{
    static void Main(string[] args)
    {
        Dictionary<string, Student> StuDic = new Dictionary<string, Student>();
        for (int i = 0; i <=100; i++)
        {
            Student stu = new Student();
            stu.Name = "stu_" + i.ToString();
            stu.Score = 100 + i;
            StuDic.Add(stu.Name, stu);
        }
        Student number6 = StuDic["stu_6"];
        Console.WriteLine(number6.Score);
    }
}
class Student
{
    public string Name;
    public int Score;
}


typeof操作符:查看一个类型的内部结构

类型的内部结构:专业描述叫MetaData。翻译:元数据。包含了:父类信息,名称空间、属性,事件等。

Type t = typeof(int);
Console.WriteLine(t);
Console.WriteLine(t.Name);
Console.WriteLine(t.FullName);
int c = t.GetMethods().Length;
foreach (var me in t.GetMethods())
{
    Console.WriteLine(me.Name);
}
Console.WriteLine(c);
// System.Int32
// Int32
// System.Int32
// 21

default:

重点看一下:结构体,引用,枚举三种类型。

1、结构体类型:

int a = default(int);
Console.WriteLine(a);
// 0

2、引用类型:

默认为null;

3、枚举类型:

class Program
{
    static void Main(string[] args)
    {
        Level level = default(Level);
        Console.WriteLine(level);
    }
}
enum Level
{
    Low,
    Mid,
    High
}

// Low

默认输出为枚举类型的第一个值。枚举类型可以显示的赋值。

class Program
{
    static void Main(string[] args)
    {
        Level level = default(Level);
        Console.WriteLine(level);
    }
}
enum Level
{
    Low=0,
    Mid=1,
    High=2
}

// Low

如果枚举中,没有赋值0,那么此时default可以会出错,返回值为0。

class Program
{
    static void Main(string[] args)
    {
        Level level = default(Level);
        Console.WriteLine(level);
    }
}
enum Level
{
    Low=1,
    Mid=2,
    High=3
}

// 0

所以枚举中,如果赋值,一定要有一个零值。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值