第二季 C#编程中级篇

跟siki一起学习C#编程,为学好unity打好基础

默认教学计划
4015人加入学习
(16人评价)
价格 ¥8.00 ¥ 10.00 8折
活动
教学计划
会员免费学 购买课程

结构体是值类型,不是引用,赋值只会赋值其中变量的值

[展开全文]

一个虚函数在子类如果没有用override重写,那么这个方法就是被隐藏了,根据声明对象调用方法

[展开全文]

1.子类无法访问父类的私有字段,可以通过调用构造函数。

[展开全文]

1.密封类不能被继承,密封类可以直接声明在任何类上。

2.密封方法只能声明在重写的方法(父类方法声明为virtual,子类override重写方法)中,表示该方法不能被重写了。

[展开全文]

1.抽象类可以声明对象,但不能去构造,可以通过派生类去构造。抽象类不能实例化

2.我们继承一个抽象类时候(不完整的模板),必须去实现抽象方法(给出函数体)。

[展开全文]

 

调用上(根据声明对象)

子类声明对象:调用隐藏方法调用子类的

父类声明对象:调用父类隐藏方法

[展开全文]

把基类声明为virtual就可以在任何派生类重写该函数,在派生类重写要使用override关键字声明(也可以不重写)

子类构造的对象,和子类构造方法调用都是重写后的函数

父类的就是重写前的函数

父类对象,子类构造方法,关键看构造方法,则调用重写后函数

子类对象不可以使用父类的构造方法

 

[展开全文]

继承:父类里面所有的数据成员和函数成员都会继承到子类里面。

父类声明的对象可以用子类去构造,本质上变成了子类类型也就使用子类方法和里面函数。反之不可以。

父类里公有的数据和函数成员才可以在子类里面访问

[展开全文]

接口只能包含方法,属性,索引器和事件的声明

接口不允许有构造函数也不能有字段和运算符重载

接口成员都是共有的不允许声明成员的修饰符。

接口可以彼此继承,其方式和类的继承方式相同

 

[展开全文]

在子类中调用父类的构造函数(无参)会先调用父类的,然后是子类的

[展开全文]

有没有base都可以访问

加上base编译器会给出提示,方便选择,拔掉用的字段和方法都罗列出来方便选择

this:指当前类,this调用当前类的属性,方法,包括构造函数的方法,继承本类的构造函数

base:指当前类的父类,可调用父类的非私有属性,方法,继承父类的构造函数括号里的参数

 

 

一:this的用处

1.限定被相似的名称隐藏的成员,方法或函数(多数用在构造函数中)

     class Person
    {
        private string name;
        public Person(string name)
        {
            this.name = name;
        }
    }

由于this.name中的name和入参name的名称一样,即被入参隐藏了,所以要用this限定name是本类的属性
2.将自己this对象作为参数传递给其它方法 

    class Teacher
    {
        public void tshow()
        {
            Console.WriteLine("我是老师!");
            Console.WriteLine(this);//显示的是本类的类名
        }
    }
3.声明索引器
        private int _index;
        public int this[int index]
        {
            get { return _index; }
            set { _index = index; }
        }
二:base的用处(base实现了多态)
1.在子类中通过base调用父类的构造函数,即在子类初始化时和父类进行通信。
     class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person("小李");
            p.show();
            Teacher t = new Teacher("小刘",18);
            t.tshow();
           
            Console.Read();
        }
    }
    class Person
    {
        protected string name;
        public Person(string name)
        {
            this.name = name;
        }
        public void show()
        {
            Console.WriteLine("我属于人类!");
        }
    }
    class Teacher:Person
    {
        
        public Teacher(string name,int age)
            : base(name)
        {
            this.Age = age;
        }
        private int _age;
        public int Age
        {
            get { return _age; }   //读
            set { _age = value; }  //写
        }
        public void tshow()
        {
            Console.WriteLine("我是学生{0}{1}!",name,Age);        
        }      
    }
2.调用基类上已被其它方法重写的方法
     class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p.show();
            Teacher t = new Teacher();
            t.show();
            Console.Read();
        }
    }
    class Person
    {
        public virtual void show()
        {
            Console.WriteLine("我属于人类");
        }
    }
    class Teacher:Person
    {
        public override void show()
        {
            base.show();
            Console.WriteLine("我是老师");
        }
    }
3.调用基类的构造函数
     class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p.show();
            Teacher t = new Teacher();
            t.tshow();
            Console.Read();
        }
    }
    
    class Person
    {
        public void show()
        {
            Console.WriteLine("我属于人类");
        }
    }
    class Teacher:Person
    {
        public void tshow()
        {
            base.show();
            Console.WriteLine("我是老师");
        }
    }

【注】
在多层继承中:

1>有重载,base指向直接继承的父类

2>无重载,base可指向任意上级父类
--------------------- 
作者:王如霜 
来源:CSDN 
原文:https://blog.csdn.net/wrs120/article/details/53667362 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

[展开全文]

重写override和new隐藏,只是把父类的方法隐藏

[展开全文]
Arnold · 2019-02-10 · 隐藏方法 0

我们在子类里重写虚函数后,不管在哪里调用都是调用重写之后的虚方法

 

[展开全文]
Arnold · 2019-02-10 · 虚方法 0

堆和栈:程序运行时的内存区域

把内存分为堆区域和栈区域

栈空间比较小,但是读取速度快

堆空间比较大,但是读取速度慢

 
 
G
M
T
Y
 
 
  检测语言世界语中文简体中文繁体丹麦语乌克兰语乌兹别克语乌尔都语亚美尼亚语伊博语俄语保加利亚语信德语修纳语僧伽罗语克罗地亚语冰岛语加利西亚语加泰罗尼亚语匈牙利语南非祖鲁语卡纳达语卢森堡语印地语印尼巽他语印尼爪哇语印尼语古吉拉特语吉尔吉斯语哈萨克语土耳其语塔吉克语塞尔维亚语塞索托语夏威夷语威尔士语孟加拉语宿务语尼泊尔语巴斯克语布尔语(南非荷兰语)希伯来语希腊语库尔德语弗里西语德语意大利语意第绪语拉丁语拉脱维亚语挪威语捷克语斯洛伐克语斯洛文尼亚语斯瓦希里语旁遮普语日语普什图语格鲁吉亚语毛利语法语波兰语波斯尼亚语波斯语泰卢固语泰米尔语泰语海地克里奥尔语爱尔兰语爱沙尼亚语瑞典语白俄罗斯语科萨科西嘉语立陶宛语索马里语约鲁巴语缅甸语罗马尼亚语老挝语芬兰语苏格兰盖尔语苗语英语荷兰语菲律宾语萨摩亚语葡萄牙语蒙古语西班牙语豪萨语越南语阿塞拜疆语阿姆哈拉语阿尔巴尼亚语阿拉伯语韩语马其顿语马尔加什语马拉地语马拉雅拉姆语马来语马耳他语高棉语齐切瓦语
 
世界语中文简体中文繁体丹麦语乌克兰语乌兹别克语乌尔都语亚美尼亚语伊博语俄语保加利亚语信德语修纳语僧伽罗语克罗地亚语冰岛语加利西亚语加泰罗尼亚语匈牙利语南非祖鲁语卡纳达语卢森堡语印地语印尼巽他语印尼爪哇语印尼语古吉拉特语吉尔吉斯语哈萨克语土耳其语塔吉克语塞尔维亚语塞索托语夏威夷语威尔士语孟加拉语宿务语尼泊尔语巴斯克语布尔语(南非荷兰语)希伯来语希腊语库尔德语弗里西语德语意大利语意第绪语拉丁语拉脱维亚语挪威语捷克语斯洛伐克语斯洛文尼亚语斯瓦希里语旁遮普语日语普什图语格鲁吉亚语毛利语法语波兰语波斯尼亚语波斯语泰卢固语泰米尔语泰语海地克里奥尔语爱尔兰语爱沙尼亚语瑞典语白俄罗斯语科萨科西嘉语立陶宛语索马里语约鲁巴语缅甸语罗马尼亚语老挝语芬兰语苏格兰盖尔语苗语英语荷兰语菲律宾语萨摩亚语葡萄牙语蒙古语西班牙语豪萨语越南语阿塞拜疆语阿姆哈拉语阿尔巴尼亚语阿拉伯语韩语马其顿语马尔加什语马拉地语马拉雅拉姆语马来语马耳他语高棉语齐切瓦语  
 
 
 
 
 
 
 

 
文本转语音功能仅限200个字符
 
 
 
选项 : 历史 : 反馈 : Donate 关闭
[展开全文]

2、声明:

访问修饰符 数据类型 属性名

{

  get{return 字段;}  //读访问器,通过它外部用户可以读取属性的值

  set{字段=value;}  //写访问器,通过它外部用户可以为属性赋值,用户输入的值就存放在value关键字中,并可以进行输入值验证               

}

例:

public class Student

{

private int age;   //私有字段,防止用户直接访问

public int Age

{

get{return age;}  //用于读取age的值

set

{

if((value>=18)&&(value<=45))

age=value;  //为age赋值并验证

else

age=18;

}

}

}

 

 

 

a) 只读属性:

public 数据类型 属性名称

{

get{return 字段;}

}

b) 自动属性:

public 数据类型 属性名称{get;set;}

[展开全文]

授课教师

课程特色

图文(1)
视频(38)