如何从类列表中获取静态属性

时间:2013-05-05 06:48:47

标签: c# asp.net

我有这样的课程:

public class StaticProvider
{
    public static int ID_DR;
    public static string CorporateName;
    public static string Logo;
    public static string Address;
    public static string Suite;
    public static string City;
    public static string State;
    public static Decimal Zip;
    public static string Phone;
    public static string Facebook;
    public static string Twitter;
    public static string Doctor;
    public static string Password;
    public static string Email;
    public static string OfficeWebLink_URL;
    public string Provider_Name;
    public int Provider_id;
}

我有一个这样的返回类型:List<StaticProvider> Lst= new List<StaticProvider>(), 问题在这里: 如何从我的列表中获取静态属性

对于Exaple我想得到StaticProvider.Address

3 个答案:

答案 0 :(得分:3)

StaticProvider.Logo。你在列表中存储什么并不重要。

答案 1 :(得分:3)

我认为你误解了静态变量的工作方式。假设您的类要表示某种联系,那么您的变量不应该是静态的。它们应该是实例变量。

目前,给定StaticProvider的两个实例,您可以有两个不同的Provider_id值,但不能有两个不同的密码,地址等 - 因为只有一个 Password字段,用于类型本身,而不是该类型的任何特定实例。

此外,最好使用属性而不是公共字段 - 将您的类型的公共API与您在类型中存储数据的方式分开。最后,遵循.NET命名约定(删除下划线)并为您的类提供更有意义的名称。例如:

public class Contact
{
    public string CorporateName { get; set; }
    public string Logo { get; set; }
    ...
    public int ProviderId { get; set; }
}

说实话,“提供者”到底是什么并不是很清楚。也许你真的想要两个类:

public class ContactProvider
{
    public string ProviderName { get; set; }
    public int ProviderId { get; set; }

    public Contact LoadContact(int contactId)
    {
        ...
    }
}

public class Contact
{
    public string CorporateName { get; set; }
    public string Logo { get; set; }
    // No need for provider properies, or possibly one of type ContactProvider
}

答案 2 :(得分:0)

请记住,静态成员属于类/类型而不属于实例 - 这就是您无法访问实例属性的原因。

要访问StaticProvider类实例上的字段,您需要删除static关键字。这将使该字段属于一个实例,而你会很高兴。

示例:

public class StaticProvider
{
    ...
    public string Address;
    ...
}

作为一般性评论,我认为使用公共属性而不是公共字段要好得多。使用属性,您可以封装对存储值的实际字段的访问。通过这种方式,您可以更好地控制可以分配给字段的内容,正如Jon Skeet所说,您还将公共“API”与数据存储方式分开 - 这是一个很好的观点。