-4

我有这样的课:

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>(),问题在这里:如何从我的列表中获取静态属性

例如,我想得到StaticProvider.Address

4

3 回答 3

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
}
于 2013-05-05T06:53:01.107 回答
3

静态提供者.Logo。您在列表中存储什么并不重要。

于 2013-05-05T06:51:09.357 回答
0

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

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

例子:

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

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

于 2013-05-05T06:51:52.263 回答