dotNet面对对象——2,类和实例对象

1,简单使用

类是一个模版,决定了实例是什么样子。
实例是一堆数据,可以访问和修改。

类可以声明属性和方法。new关键字可以创建类的实例。

通过实例,可以:
访问实例的属性。
调用实例的方法。

namespace a {
    
    
	class B {
    
    
		public static void Main(String[] args) {
    
    
			Student s1 = new Student();
			s1.name = "张三";
			s1.say();
		}
	}
	class Student {
    
    
		public string name;
		public void say() {
    
    
			Console.WriteLine($"我叫{
      
      this.name}");
		}
	}
}

效果:

在这里插入图片描述

2,get,set方法

可以由这些方法访问属性。语义上更好操作。

namespace a {
    
    
	class B {
    
    
		public static void Main(String[] args) {
    
    
			Student s1 = new Student();
			s1.setName("张三");
			s1.say();
		}
	}
	class Student {
    
    
		string name;
		public void setName(string name) {
    
    
			this.name = name;
		}
		public string getName() {
    
    
			return this.name;
		}
		public void say() {
    
    
			Console.WriteLine($"我叫{
      
      this.getName()}");
		}
	}
}

效果:

在这里插入图片描述
也可以声明一个get,set属性。仅负责对外提供get,set方法,不保存数据。

namespace a {
    
    
	class B {
    
    
		public static void Main(String[] args) {
    
    
			Student s1 = new Student();
			s1.Name = "张三";
			s1.say();
		}
	}
	class Student {
    
    
		private string name;
		
		//本身没有数据
		public string Name {
    
     get => name; set => name = value; }

		public void say() {
    
    
			Console.WriteLine($"我叫{
      
      this.Name}");
		}
	}
}

效果:
在这里插入图片描述
VS快捷键:选中属性,ctrlR,ctrlE。

3,static关键字

静态:类上的数据,可以直接由类名直接访问,比如Console。

非静态:实例上的数据,各个实例数据不影响。

4,构造方法

没有返回值,名称与类名一致。

namespace a {
    
    
	class B {
    
    
		public static void Main(String[] args) {
    
    
			Student s1 = new Student("张三");
			s1.say();
		}
	}
	class Student {
    
    
		private string name;
		public Student(string name) {
    
    
			this.name = name;
		}

		public void say() {
    
    
			Console.WriteLine($"我叫{
      
      this.name}");
		}
	}
}

参数:默认会有一个无参的构造。

如果声明了有参,就不会有那个无参,
想用的话,需要再手动声明一次。

public Student() {
    
    
}
public Student(string name) {
    
    
	this.name = name;
}

5,this关键字

在类内部使用,代表当前实例。

加上括号,代表对应构造方法。

6,销毁方法

没有返回值,名称也与类名一致。多一个波浪线。

效果不容易观察。

class Student {
    
    
	private string name;
	public Student(string name) {
    
    
		this.name = name;
	}
	~Student() {
    
    
		Console.WriteLine("我回收啦!");
	}
	public void say() {
    
    
		Console.WriteLine($"我叫{
      
      this.name}");
	}
}

7,命名空间

namespace可以管理类的包路径。

一个space内部默认只能访问自身内部的东西。
以下代码会报错:

namespace b {
    
    
	class Program {
    
    
		public static void Main(string[] args) {
    
    
			Student s1 = new Student("张三");
			s1.say();
		}
	}
}

namespace a {
    
    
	class Student {
    
    
		private string name;
		public Student(string name) {
    
    
			this.name = name;
		}
		~Student() {
    
    
			Console.WriteLine("我回收啦!");
		}
		public void say() {
    
    
			Console.WriteLine($"我叫{
      
      name}");
		}
	}
}

用using可以引入space。

namespace b {
    
    
	using a;
	
	class Program {
    
    
		public static void Main(string[] args) {
    
    
			Student s1 = new Student("张三");
			s1.say();
		}
	}
}

namespace a {
    
    
	class Student {
    
    
		private string name;
		public Student(string name) {
    
    
			this.name = name;
		}
		~Student() {
    
    
			Console.WriteLine("我回收啦!");
		}
		public void say() {
    
    
			Console.WriteLine($"我叫{
      
      name}");
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_37284843/article/details/124551446