c#自学之路第十二天
一、笔记
1.继承(如:继承)
特性:
1.单跟性:一个字类只能有一个父类
2.传递性:
我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员单独的封装到一个类中,作为这些类的父类。
字类继承父类的方法和属性,没有继承父类的私有字符段,也没有继承父类的构造函数,但是字类会默认调用父类无参的构造函数,用来创建父类对象,让子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参的构造函数之后,无参的构造函数会被干掉,字类就调用不到了,所以字类会报错。
解决办法:
1)在父类中重新写一个无参的构造函数
2)在字类中显示的调用父类的构造函数,使用关键字:base()(常用)
2.查看类图
对应的项目——>视图
3.object是所有类的基类
4.new关键字
1)创建对象
2)隐藏从父类那里继承过来的同名成员 隐藏的后果是调用不到父类的成员
二、代码
namespace 继承
{
class Program
{
static void Main(string[] args)
{
Student s = new Student("学生", 18, '男', 101);
}
}
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
private void CHLSS()
{
Console.WriteLine("吃喝拉撒睡");
}
public Person(string name, int age, char gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
}
}
public class Student : Person
{
public Student(string name, int age, char gender, int id)
: base(name, age, gender)
{
//this.Name = name;
//this.Age = age;
//this.Gender = gender;
this.Id = id;
}
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
public void Study()
{
Console.WriteLine("我会学习");
}
}
public class Teacher : Person
{
public Teacher(string name, int age, char gender, double salary)
: base(name, age, gender)
{
this.Salary = salary;
}
private double _salary;
public double Salary
{
get { return _salary; }
set { _salary = value; }
}
public void Teach()
{
Console.WriteLine("我会教书");
}
}
public class Driver : Person
{
public Driver(string name, int age, char gender, int dirvertime)
: base(name, age, gender)
{
this.DirverTime = dirvertime;
}
private int _dirveTime;
public int DirverTime
{
get { return _dirveTime; }
set { _dirveTime = value; }
}
public void Drive()
{
Console.WriteLine("司机会开车");
}
}
}
namespace 继承练习
{
class Program
{
static void Main(string[] args)
{
//记者:我是记者 我爱好偷拍 我的年龄是34 我是一个男狗仔
//司机:我叫舒马赫 我的年龄是43 我是男人 我的驾龄是21年
//程序员:我叫孙全 我的年龄是23 我是男生 我的工作年限是3年
Reporter rep = new Reporter("狗仔", 34, '男', "偷拍");
rep.ReporterSayHello();
Programmer pro = new Programmer("程序员", 23, '男', 3);
pro.ProgrammerSayHello();
pro.SayHello();
Console.ReadKey();
}
public class Person
{
private string _name;
private int _age;
private char _gender;
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Age
{
get { return _age; }
set { _age = value; }
}
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
public Person(string name,int age,char gender)
{
this.Age = age;
this.Name = name;
this.Gender = gender;
}
public void SayHello()
{
Console.WriteLine("大家好,我是一个人");
}
}
public class Reporter:Person
{
private string _hobby;
public string Hobby
{
get { return _hobby; }
set { _hobby = value; }
}
public void ReporterSayHello()
{
Console.WriteLine("我叫{0},我是一名狗仔,我的爱好是{1},我是{2}生,我今年{3}岁了", this.Name, this.Hobby, this.Gender, this.Age);
}
public Reporter(string name,int age,char gender,string hobby)
:base(name,age,gender)
{
this.Hobby = hobby;
}
public new void SayHello()
{
Console.WriteLine("大家好,我是一名记者");
}
}
public class Programmer:Person
{
private int _workYear;
public int WorkYear
{
get { return _workYear; }
set { _workYear = value; }
}
public void ProgrammerSayHello()
{
Console.WriteLine("我叫{0},我是一名程序员,我是{1}生,我今年{2}岁了,我的工作年限是{3}年",this.Name,this.Gender,this.Age,this.WorkYear);
}
public Programmer(string name,int age,char gender,int workYear)
:base(name,age,gender)
{
this.WorkYear = workYear;
}
public new void SayHello()
{
Console.WriteLine("大家好,我是一名程序员");
}
}
}
}
namespace 方法练习1
{
class Program
{
static void Main(string[] args)
{
//举例:写一个方法,判断输入年份为是否为闰年
bool b=IsRun(2000);
Console.WriteLine(b);
Console.ReadKey();
}
/// <summary>
/// 判断改定的年份是否是闰年
/// </summary>
/// <param name="year">年份</param>
/// <returns>判断的结果</returns>
public static bool IsRun(int year)
{
bool b = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
return b;
}
}
}
namespace 方法练习2
{
class Program
{
public static void Main(string[] args)
{
//比较两个数字的大小 返回最大的
int n1 = 10;
int n2 = 20;
int max=GetMax(n1, n2);//实参
Console.WriteLine(max);
Console.ReadKey();
}
/// <summary>
/// 计算两个数之间的计算值
/// </summary>
/// <param name="n1">第一个数</param>
/// <param name="n2">第二个数</param>
/// <returns>返回最大的数</returns>
public static int GetMax(int n1,int n2)//形参
{
int max = n1 > n2 ? n1 : n2;
return max;
}
}
}
namespace 方法练习3
{
class Program
{
static void Main(string[] args)
{
//读取输入的整数
//多次调用(如果用户输入的是数字,则返回,否则提示用户重新输入)
while(true)
{
Console.WriteLine("请输入一个数字:");
string input = Console.ReadLine();
int number=NewMethod(input);
Console.WriteLine(number);
Console.ReadKey();
}
}
/// <summary>
/// 判断输入的是否是数字
/// 如果是数字则返回
/// 如果不是数字,提示用户重新输入
/// </summary>
/// <param name="input">输入的数字</param>
public static int NewMethod(string input)
{
while(true)
{
try
{
int number = Convert.ToInt32(input);
return number;
}
catch
{
Console.WriteLine("请重新输入:");
input = Console.ReadLine();
}
}
}
}
}
namespace 方法练习5
{
class Program
{
static void Main(string[] args)
{
//计算一个数组的整和
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine("数组和为{0}", Sum(nums));
Console.ReadKey();
}
/// <summary>
/// 求数组和
/// </summary>
/// <param name="nums">数组</param>
/// <returns>和</returns>
public static int Sum(int[] nums)
{
int sum=0;
for(int i=0;i<nums.Length;i++)
{
sum += nums[i];
}
return sum;
}
}
}
namespace 方法练习6
{
class Program
{
static void Main(string[] args)
{
//有一个字符串,输出最长
string[] name = { "马龙", "迈克尔乔丹", "雷古米勒", "蒂姆邓肯", "科比布雷恩特" };
Console.WriteLine(GetLongest(name));
Console.ReadKey();
}
public static string GetLongest(string[] s)
{
string max = s[0];
for (int i = 0; i < s.Length; i++)
{
if (s[i].Length > max.Length)
max = s[i];
}
return max;
}
}
}
namespace 方法练习8
{
class Program
{
static void Main(string[] args)
{
//写一个方法,用来判断用户输入的数字是不是质数
//再写一个方法 要求用户只能输入数字 输入有误就一直让用户输入
Console.WriteLine("请输入一个数字");
string number = Console.ReadLine();
int num = GetNumber(number);
Console.WriteLine(num);
bool b = IsZhi(num);
Console.WriteLine(b);
Console.ReadKey();
}
/// <summary>
/// 输入一个数字
/// </summary>
/// <param name="s">输入的数字</param>
/// <returns>返回的整数</returns>
public static int GetNumber(string s)
{
int n;
while(true)
{
try {
n = Convert.ToInt32(s);
return n;
}
catch
{
Console.WriteLine("请重新输入");
s = Console.ReadLine();
}
}
}
/// <summary>
/// 判断是否是质数
/// </summary>
/// <param name="n">要判断数</param>
/// <returns>判断结果</returns>
public static bool IsZhi(int n)
{
if(n<2)
{
return false;
}
else
{
for(int i=2;i<n;i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
}
}
}
namespace 方法练习9
{
class Program
{
static void Main(string[] args)
{
//接受输入后判断其等级并显示出来
int s;
Console.WriteLine("请输入考试成绩");
string m = Console.ReadLine();
s = Convert.ToInt32(m);
Console.WriteLine(GetLevel(s));
Console.ReadKey();
}
public static string GetLevel(int score)
{
string level = "";
switch (score / 10)
{
case 10:
case 9: level = "优"; break;
case 8: level = "良"; break;
case 7: level = "中"; break;
case 6: level = "差"; break;
default: level = "不及格"; break;
}
return level;
}
}
}