2026/4/18 9:08:29
网站建设
项目流程
四川网站建设电话,ios软件资源网站,国际最新时事新闻热点,网站开发可以开发哪些静态成员类成员和方法分为静态和非静态两大类静态成员或者方法 找类名 进行使用 存储类中 是类共有的非静态的成员或方法 找对象 进行使用 存储在每一个对象里面非静态方法可以访问静态的成员或方法 也可以访问非静态的方法和成员静态方法不能访问非静态成员或者方法 可以访问静…静态成员类成员和方法分为静态和非静态两大类静态成员或者方法 找类名 进行使用 存储类中 是类共有的非静态的成员或方法 找对象 进行使用 存储在每一个对象里面非静态方法可以访问静态的成员或方法 也可以访问非静态的方法和成员静态方法不能访问非静态成员或者方法 可以访问静态的成员或方法1 首先创建一个public公共类public class People { }2 在类里面添加静态成员public string Name { get; set; }//非静态成员 public static int Count { get; set; }//静态成员3 创建静态方法静态方法public static void Test1() { Console.WriteLine(我是静态方法Test2); Console.WriteLine(Count?????????); }需要注意的是不要在自己的方法里面调用自己 会导致死循环Console.WriteLine(this.Name////////); Test2():非静态方法public void Test() { Console.WriteLine(我是非静态方法Test); Console.WriteLine(this.Name------);//this在本类里面可以this代表当前对象this在本类可以省掉 Console.WriteLine(Count); People.Test1();//People在本类可以省掉静态例子using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _02静态例子 { internal class Program { //非静态的每个对象上都有一份 static void Main(string[] args) { People 嘉伟 new People(); 嘉伟.Eat();//每次吃一个 Console.WriteLine(嘉伟.GetShengYu());//49 Console.WriteLine(People.Count);//49 People 艺员 new People(); 艺员.Eat(); Console.WriteLine(艺员.GetShengYu());//48 Console.WriteLine(People.Count);//48 } } class People { public static int Count { get; set; } 50;//苹果的总数 public void Eat() //吃苹果的方法 { Count--; } public int GetShengYu() { return Count; } } }using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _03静态例子2 { internal class Program { static void Main(string[] args) { Student 有才 new Student() { Name 有才, Age 18, Sex 男, Id 001, C1 new Computer() { Type 机械革命, Price 10000 } }; 有才.ShowInfo(); Console.WriteLine(Student.Count);//总个数 1 Student 许杨 new Student() { Name 许杨, Age 20, Sex 男, Id 002, C1 new Computer() { Type 联想, Price 10000 } }; 许杨.ShowInfo(); Console.WriteLine(Student.Count);//总个数 2 Console.ReadKey(); } } class Student { private static int count;//私有的count 代表人数 public static int Count { get { return count; } set { count value; } } //在外部可以访问Count 返回count的值 public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } public int Id { get; set; } public Computer C1 { get; set; }// 电脑信息 public void ShowInfo() { Console.WriteLine($学生姓名是:{Name},年龄是{Age}性别是{Sex}学号{Id}带一台{C1.Type}价格是{C1.Price}电脑); } public Student() { count;//创建对象 学生个数加1 } } class Computer { public string Type { get; set; } public int Price { get; set; } } }常量和只读的变量1 只读的字段:只能获取字段值如果想修改的话只能在构造函数里面进行修改在其他地方不能修改2 非静态只读的字段 只能在构造函数里面进行修改public readonly double 资产 10000000;//这个是只读的字段3 静态只读字段 只能在静态构造函数里面修改public static readonly string 昵称 翻斗花园;//静态只读字段 它只能在静态构造函数里面修改4 const 是常量 不能够被修改public const int c 10;创建一个构造函数public aaa()//构造函数 new的时候调用 { 资产 1000000000; }public void bb() //非静态 { //资产 1000000000;报错 只读不能在其他函数赋值 } public static void cc() //静态 { //资产 1000000000;报错 只读的不能在其他函数赋值 //Console.WriteLine(资产);//报错 静态只能访问静态 }类的继承无参数构造或者有参数构造使用的是以下场景DateTime a1 new DateTime(2025, 12, 17); ti.AddDays(1);//非静态方法 ArrayList a2 new ArrayList[1]; Listint i1 new Listint(new int[] { }); Dictionaryint,int d1 new Dictionaryint,int(); Array.Clear(); // 静态方法的体现面向对象编程语言的四大特征封装:把一些属性和方法封装到一个类里面这个时候对类的封装方法的封装把一下相关代码写在一个代码块里面 通过方法名进行调用继承:当我们一些想添加一些属性 但是这些属性已经在其它类已经存在 没必要类重新定义属性 可以让这个类继承于其他类 会把其他类型属性和方法继承过来多态:同一个功能不同体现的方式抽象:把属性和方法生成一个模板 没有具体实现继承的分类继承:分为父类和子类两个概念父类:叫做基类 把父亲属性和方法继承给予子类子类:叫做派生类 继承父类里面的属性和方法创建父类和子类class People { public string Name { get; set; }//姓名 public int Age { get; set; }//年龄 公共属性能被子类继承 private string Sex { get; set; }//私有不能被继承 protected string N { get; set; } 魅魔;//受保护的能被子类继承的 不能在外部被对象.属性访问 protected internal string M { get; set; } 梅根;//可以在外部进行访问 可以被子类继承 public void Test() //方法也能被子类继承 { Console.WriteLine(父类的test方法); } } //男人类继承People //People 父类:Man子类 class Man : People { public string Hair { get; set; } public void Eat() { Console.WriteLine(this.Name带this.Hair型,吃着炸鸡); } } //SmallMan继承于Man Man再继承People //SmallMan 包含了Man和People公共属性和方法 //类不允许使用多继承 也就是不允许让a同时继承于b类 c类 但是能够让a继承于b b类继承于c类 class SmallMan : Man { public void Cray() { Console.WriteLine(this.Name this.Age this.M this.Nthis.Hair); } }在Main函数里面调用People p1 new People();//父类对象 p1.Name 皮特; p1.Age 30; Console.WriteLine(p1.Namep1.Age父类对象); Man jiaozi new Man();//子类对象 jiaozi.Name 饺子; jiaozi.Age 5; jiaozi.Hair 饺子形状; jiaozi.Test(); jiaozi.Eat(); Console.WriteLine(jiaozi.Namejiaozi.Age子类对象); //创建一个SmallMan对象 SmallMan s new SmallMan(); s.Name 布莱恩; s.Age 2; s.Hair 白头; s.M 路易斯; s.Cray();子类构造函数先创建一个子类class People { public string Name { get; set; } public int Age { get; set; } public People() { Console.WriteLine(People父类构造函数); } public People(string a, int b)//在People后面的小括号里面添加:数据类型 参数 { //带参数的构造函数 Name a; Age b; Console.WriteLine(People带参数的构造函数); } }Name和Age属性继承过来class Student : People { //Name和Age属性啊可以继承过来 public int Id { get; set; } public Student() { Console.WriteLine(Student子类构造函数); } public Student(string a ,int b) { Console.WriteLine(子类带参数的构造函数); } public Student(string a):base(a,20)//base的意思是基类也是父类 默认调用的是People类 { //调用这个方法触发父类带参数的构造函数 Console.WriteLine(a验证在值类里面去调用父类中有参数的构造 base基类 父类); } }最后在Main函数里调用子类Student a new Student();//调用子类的构造函数,首先先去父类的不带参数构造函数 Student b new Student(11,10);//调用的是子类带参数的构造函数 首先调用的还是不带参数的构造函数 //能不能调用子类的有参数构造能够触发父类有参数的构造函数。子类如何调用一个构造函数 Student c new Student(张三);//调用一个参数构造 Console.ReadKey();结构体与类的区别类和结构体的区别在哪里1 结构体是值类型 类是引用类型2 结构体不能定义无参数的构造函数如果定义有参数的构造函数 在函数里面必须对所有属性进行赋值3 结构体在定义属性或者字段的时候不能赋初始值4 结构体不能继承其他的结构体或者是类也不能被继承定义结构体和使用结构体Book b1new Book(张三历险记,220); b1.Test(); Console.WriteLine(b1.Name); Book b2 b1;//把b1赋值给b2 b1.Name 西游记; Console.WriteLine(b2.Name);//张三历险记 不会因为修改而更改 Console.WriteLine(b1.Name);//因为b1修改了所以结果为 西游记创建一个类struct Book { public string Name { get; set; } public int Price { get; set; } private int a1; public Book(string a, int b) { Name a; Price b; a1 20; } public void Test() { Console.WriteLine(struct里面的方法); } }在结构体里面如果想要添加构造函数 只能定义带参数的构造函数 必须给全部属性在构造函数里面赋值public Book() { Name ss; Price 10; } 结构体是值类型的表现