1.delegate问题:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void OtherClassMethod()
{
Console.WriteLine("Delegate an other class's method");
}
static void Main(string[] args)
{
var test = new TestDelegate();
test.delegateMethod = new TestDelegate.DelegateMethod(test.NonStaticMethod);
test.delegateMethod += new TestDelegate.DelegateMethod(TestDelegate.StaticMethod);
test.delegateMethod += Program.OtherClassMethod;
test.RunDelegateMethods();
}
}
class TestDelegate
{
public delegate void DelegateMethod(); //声明了一个Delegate Type
public DelegateMethod delegateMethod; //声明了一个Delegate对象
public static void StaticMethod()
{
Console.WriteLine("Delegate a static method");
}
public void NonStaticMethod()
{
Console.WriteLine("Delegate a non-static method");
}
public void RunDelegateMethods()
{
if (delegateMethod != null)
{
Console.WriteLine("---------");
delegateMethod.Invoke();
}
Console.WriteLine("---------");
}
}
}
2.delegate,event问题:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var car = new Car(15);
new Alerter(car);
car.Run(120);
}
}
class Car
{
public delegate void Notify(int value);
public event Notify notifier;
private int petrol = 0;
public int Petrol
{
get { return petrol; }
set
{
petrol = value;
if (petrol < 10) //当petrol的值小于10时,出发警报
{
if (notifier != null)
{
notifier.Invoke(Petrol);
}
}
}
}
public Car(int petrol)
{
Petrol = petrol;
}
public void Run(int speed)
{
int distance = 0;
while (Petrol > 0)
{
Thread.Sleep(500);
Petrol--;
distance += speed;
Console.WriteLine("Car is running... Distance is " + distance.ToString());
}
}
}
class Alerter
{
public Alerter(Car car)
{
car.notifier += new Car.Notify(NotEnoughPetrol);
}
public void NotEnoughPetrol(int value)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("You only have " + value.ToString() + " gallon petrol left!");
Console.ResetColor();
}
}
}
3.interface问题:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp3 { public interface IPerson { string Name { get; set; } void Show(string name); } public interface IStudent { string StudentId { get; set; } void Show(string studentid); } public class Student : IPerson, IStudent { private string _name; public string Name { get { return _name; } set { _name = value; } } private string _studentid; public string StudentId { get { return _studentid; } set { _studentid = value; } } void IPerson.Show(string name) { Console.WriteLine("姓名为{0}", name); } void IStudent.Show(string studentid) { Console.WriteLine("学号为{0}", studentid); } } class Program { static void Main() { Student s = new Student(); Console.WriteLine("输入姓名"); s.Name = Console.ReadLine(); Console.WriteLine("输入学号"); s.StudentId = Console.ReadLine(); IPerson per = s; per.Show(s.Name); IStudent stu = s; stu.Show(s.StudentId); } } }
4.abstract,virtual问题:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp4 { public abstract class Book { public Book() { } public abstract void getPrice(); //抽象方法,不含主体 public virtual void getName() //虚方法,可覆盖 { Console.WriteLine("this is a test:virtual getName()"); } public virtual void getContent() //虚方法,可覆盖 { Console.WriteLine("this is a test:virtual getContent()"); } public void getDate() //一般方法,若在派生类中重写,须使用new关键字 { Console.WriteLine("this is a test: void getDate()"); } } public class JavaBook : Book { public override void getPrice() //实现抽象方法,必须实现 { Console.WriteLine("this is a test:JavaBook override abstract getPrice()"); } public override void getName() //覆盖原方法,不是必须的 { Console.WriteLine("this is a test:JavaBook override virtual getName()"); } } class test { public test() { JavaBook jbook = new JavaBook(); jbook.getPrice(); //将调用JavaBook中getPrice() jbook.getName(); //将调用JavaBook中getName() jbook.getContent(); //将调用Book中getContent() jbook.getDate(); //将调用Book中getDate() } } class Program { public static void Main() { test t = new test(); } } }
5.Indexer问题1:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp5 { public class IDXer { private string[] name = new string[10]; //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象 public string this[int index] { get { return name[index]; } set { name[index] = value; } } } public class Program { static void Main(string[] args) { //最简单索引器的使用 IDXer indexer = new IDXer(); //“=”号右边对索引器赋值,其实就是调用其set方法 indexer[0] = "张三"; indexer[1] = "李四"; //输出索引器的值,其实就是调用其get方法 Console.WriteLine(indexer[0]); Console.WriteLine(indexer[1]); Console.ReadKey(); } } }
6.indexer问题2:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp6 { /// <summary> /// 成绩类 /// </summary> public class Scores { /// <summary> /// 学生姓名 /// </summary> public string StuName { get; set; } /// <summary> /// 课程ID /// </summary> public int CourseId { get; set; } /// <summary> /// 分数 /// </summary> public int Score { get; set; } } /// <summary> /// 查找成绩类(索引器) /// </summary> public class FindScore { private List<Scores> listScores; public FindScore() { listScores = new List<Scores>(); } //索引器 通过名字&课程编号查找和保存成绩 public int this[string stuName, int courseId] { get { Scores s = listScores.Find(x => x.StuName == stuName && x.CourseId == courseId); if (s != null) { return s.Score; } else { return -1; } } set { listScores.Add(new Scores() { StuName = stuName, CourseId = courseId, Score = value }); } } //索引器重载,根据名字查找所有成绩 public List<Scores> this[string stuName] { get { List<Scores> tempList = listScores.FindAll(x => x.StuName == stuName); return tempList; } } } class Program { static void Main(string[] args) { //多参数索引器和索引器重载 FindScore fScore = new FindScore(); fScore["张三", 1] = 98; fScore["张三", 2] = 100; fScore["张三", 3] = 95; fScore["李四", 1] = 96; //查找 张三 课程编号2 的成绩 Console.WriteLine("李四 课程编号2 成绩为:" + fScore["李四", 1]); //查找所有张三的成绩 List<Scores> listScores = fScore["张三"]; if (listScores.Count > 0) { foreach (Scores s in listScores) { Console.WriteLine(string.Format("张三 课程编号{0} 成绩为:{1}", s.CourseId, s.Score)); } } else { Console.WriteLine("无该学生成绩单"); } Console.ReadKey(); } } }