对象,继承和列表属性不起作用

时间:2014-04-04 08:20:16

标签: c# inheritance

我是OO新手......到现在为止我使用的是VB6。 我有一节课:

public class clocation_base
{
    public clocation_base() 
    {
    }
    public string ID { get; set; }
    public string Name { get; set; }
    public Int32 ImagesCurrent { get; set; }
    public Int32 ImagesTotal { get; set; }
    public DateTime? ImagesLastUpload { get; set; }
    public decimal Lon { get; set; }
    public decimal Lat { get; set; }
    public int DistanceInMeter { get; set; }
    public int Proofed { get; set; }
    public DateTime Created { get; set; }
    public string PreviewImg1 { get; set; }
    public string PreviewImg2 { get; set; }
    public string PreviewImg3 { get; set; }
    public string PreviewImg4 { get; set; }
}

现在我想用一个列表(另一个类)“扩展”这个类。 这是我的“清单:

public class clocation_media
{
    public string URL { get; set; }
    public string Type { get; set; }
    public DateTime? Timestamp { get; set; }
}

我现在用媒体列表“扩展”我的clocation_base:

public class clocation_extended : clocation_base
{
    List<clocation_media> media { get; set; }
    public clocation_extended()
    {
        media = new List<clocation_media>();
    }
}

在我的代码中我使用:

clocation_extended mTest = new clocation_extended();
mTest.Name = "Locationname";

现在我想使用:

mTest.media.Add("http://contoso.com/img1.jpg", "Image", null);

但这不起作用。

mTest.media...不存在......

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

默认情况下,

类成员在C#中是私有的,因此您必须公开media

public class clocation_extended : clocation_base
{
    public List<clocation_media> media { get; set; }
    public clocation_extended()
    {
        media = new List<clocation_media>();
    }
}

另请注意

mTest.media.Add("http://contoso.com/img1.jpg", "Image", null);

不起作用,因为media的类型为List<clocation_media>,因此您必须添加clocation_media的实例:

var media = new clocation_media
{
    Type = "Image",
    URL = "http://contoso.com/img1.jpg"
};

mTest.media.Add(media);

答案 1 :(得分:0)

必须设置List<clocation_media> media { get; set; } public,否则您无法从课堂外访问它。默认情况下,C#类中的成员为private。如果您需要除private以外的其他内容,则必须指定访问者。