我仍然在学习和打击派生类。
尝试了一些简单的事情(从我见过的例子中):
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.Path
行BaseClass does not contain a definition for Path and no extension....
答案 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";
请注意,这里编译时类型myChannel
是BaseClass
- 因此编译器无法找到Path
属性,因为BaseClass
属性中没有Channel
属性。 1}}。编译器只能根据变量的编译时类型查找成员。 (抛开动态打字......)
如果您坚持使用实际发布的代码,即使用编译时类型{{1}},那么一切都应该没问题。
答案 2 :(得分:0)
编写的代码运行正常。我怀疑你有什么
BaseClass myChannel = new Channel()
如果是这样,问题是myChannel是对BaseClass的引用,无法看到Path属性。
如果您需要访问Path,可以使用
进行访问(myChannel as Channel).Path = "123";
hth,
艾伦。