1.访问修饰符:在C#中有4个访问修饰符
public:可以在任何地方被访问
internal:只能在本项目中被访问,一个项目可以包含多个文件。
protected:只能在本类和子类中被访问
private:只能在本类中被访问。
再类这个级别,不写访问修饰符默认为internal
在类里面,方法外定义变量、方法前不佳访问修饰符默认为private。
namespace 类基本知识1 { class Person //默认为internal { string name;//默认为private int age; public void Test() { } } }
2.类的成员:字段、属性、方法
属性:通俗的说,就是定义一个public的具有get/set方法的变量,这个变量用于保护一个私有变量,即保护字段
举例:
namespace 类基本知识1 { class Person { string name; public Person(string name) { this.name = name; } public string Name //右键重构--封装字段。通过属性来访问私有的字段,好处很多 { get { return name; } //set { name = value; } } int age; public int Age { get { return age; } set { if (value > 0) { age = value; } else { age = 0; } } } public void Test() { } } }
属性默认都有get/set方法,当对属性赋值时,会调用set方法,赋的值默认存在set的value里。当对属性读取是,调用get方法
通过属性保证私有字段一定合法
属性通过有无get/set可分为:只读、只写、读写
允许外部访问的变量(字段)一定要声明为属性。
注意:当属性设置为只读时,即能防止随便改动值,但是怎么赋初值呢?
借助构造函数啦,跟C++ 的构造函数相同,不做过多介绍。至于C# 的析构函数,可以不用写,系统本身有垃圾回收机制,当系统资源紧缺时会帮我们回收垃圾
3.C#的类图查看器。
3.形参前加params,编译器会自动把参数转换成数组形式,叫可变参数,必须放在参数表最后一个.
典型例子就是public static void WriteLine(string format, params object[] arg);
static void Main(string[] args) { int[] numbers = { 1, 2, 3, 4, 5 }; int sum1=Sum(numbers); Console.WriteLine(sum1); //或者直接传数也可以 int sum2 = Sum(1, 2, 3); Console.WriteLine(sum2); } static int Sum(params int[] myArr) { int iSum=0; for (int i=0;int<myArr.Length;i++) { iSum+=myArr[i]; } return iSum; }
4.命名空间:项目名一般默认为命名空间名,命名空间不允许以数字开头,一旦项目名为数字开头,系统会自动给命名空间名前加_.
.net命名空间是逻辑上的包含关系,不是物理上的。(实质上不是一个命名空间包含另一个命名空间,只是定义的时候写成namespace System.Linq;
System是根命名空间
---不在同一个命名空间下的类,不能被直接访问,要想访问别的命名空间下的类有两种方法
1)通过using引用对方的命名空间
2)写全称.命名空间.类名
5.C#中的string类型可以看作是字符数组,可以通过字符下边来访问每一位。而C++中字符串类型就是字符数组
string s = "hello,world";
Console.WriteLine(s[2]);//访问的是l
C#中的字符串有一个重要特性:不可变性,字符串一旦声明就不可以再改变。只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。
可通过string的ToCharArray()方法来实现修改
string s = "hello,world"; char[] chars = s.ToCharArray(); chars[1] = 'i'; s = new string(chars); Console.WriteLine(s);
s="hello1“ s="world1”;
注意:字符串的值具有不可改变性,复制时新开辟了空间,变量里存的是字符串首地址,赋值时只是把变量指向改变了,内存中本来的值还在那块空间里。
5.Ctrl+.快捷提示