派生类 - 扩展属性

时间:2012-02-01 09:55:09

标签: c# derived-class

我仍然在学习和打击派生类。

尝试了一些简单的事情(从我见过的例子中):

public class BaseClass
{
    public string Title {get;set;}
}

public class Channel : BaseClass
{
    public string Path { get; set; }
}


Channel myChannel = new Channel();
myChannel.Title = "hello";
myChannel.Path = "123";

但我在myChannel.PathBaseClass does not contain a definition for Path and no extension....

上收到错误消息 请帮助我,我做错了什么?

3 个答案:

答案 0 :(得分:5)

你展示的例子很好。我认为在你的实际代码中你有:

BaseClass myChannel = new Channel();
myChannel.Title = "hello";
myChannel.Path = "123";

所以答案很简单:确保你的局部变量输入为Channel,因为它是确定起点的表达式(通常是:变量的类型)成员解决。

作为C#3的简洁替代方案:

var myChannel = new Channel { Title = "hello", Path = "123" };

答案 1 :(得分:5)

您提供的代码编译得很好。我怀疑你实际上得到了这样的代码:

BaseClass myChannel = new Channel();
myChannel.Title = "hello";
myChannel.Path = "123";

请注意,这里编译时类型myChannelBaseClass - 因此编译器无法找到Path属性,因为BaseClass属性中没有Channel属性。 1}}。编译器只能根据变量的编译时类型查找成员。 (抛开动态打字......)

如果您坚持使用实际发布的代码,即使用编译时类型{{1}},那么一切都应该没问题。

答案 2 :(得分:0)

编写的代码运行正常。我怀疑你有什么

BaseClass myChannel = new Channel()

如果是这样,问题是myChannel是对BaseClass的引用,无法看到Path属性。

如果您需要访问Path,可以使用

进行访问
(myChannel as Channel).Path = "123";

hth,
艾伦。