首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#遗传误区

C#遗传误区
EN

Stack Overflow用户
提问于 2017-03-31 12:25:05
回答 5查看 88关注 0票数 0

假设我们有2节课。第一个是人

代码语言:javascript
复制
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace People
    {
        class Person
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
    }

第二个是老师。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace People
{
    class Teacher:Person
    {
        public string Position { get; set; }
    }
}

我想用这个语法Person teacher = new Teacher();来做一个教师对象,当我试图引用这个位置属性时,我不能.这一切为什么要发生?我可以使用这个语法Person teacher = new Teacher() {Position="boss" };,但是即使在那之后,我也不能用"teacher.Position“来指老师的位置。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-03-31 12:32:09

这个问题是由引用的类型引起的。在声明中

代码语言:javascript
复制
Person teacher = new Teacher() { Position="boss" };

右侧创建一个Teacher类型的新对象,并初始化Position属性。但是,引用teacherPerson类型的。虽然teacher所引用的对象实际上是Teacher类型,但引用本身是更为通用的Person类型。

非正式地说,在上面的声明中,您声明要将teacher引用到Person,而不管它是否具有更多的派生类型Teacher,因此引用本身并不‘知道’它引用的是更特殊的类型Teacher,因此它并不‘知道’存在Position属性。

更严格地说,这是必要的,因为在运行时,可以让teacher引用来自Person的其他对象,比如StudentWizard,这些对象也可能没有Position属性。

票数 2
EN

Stack Overflow用户

发布于 2017-03-31 12:26:28

你可以这样达到它:

代码语言:javascript
复制
Person teacher = new Teacher() { Position="boss" };
var position = ((Teacher)teacher).Position;
票数 3
EN

Stack Overflow用户

发布于 2017-03-31 12:34:20

这样做:

代码语言:javascript
复制
Person teacher = new Teacher();

创建Teacher类型的对象,但是引用类型(teacher)是Person类型--这意味着使用此引用只能访问Person类型的所有成员。

要访问Teacher成员,您应该创建Teacher类型的引用

代码语言:javascript
复制
Teacher teacher = new Teacher();
var position = teacher.Position;

或者,您应该将引用转换为Teacher类型:

代码语言:javascript
复制
Person teacher = new Teacher();
var position = ((Teacher)teacher).Position;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43140624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档