如何用项目或解决方案中的成员定义静态类?

问题描述 投票:0回答:3

这是一个初学者的问题,对于大多数专家来说可能非常容易。

我正在尝试为案例研究项目(例如,建筑施工示例项目)找到正确的建筑/结构。

我正在尝试为一个项目定义一个团队,该团队在所有项目阶段都是相同的,并且都被引用,并且其成员在不同的阶段都被引用和使用。

我创建了一个Person类,该类定义了必填字段,并在我的ProjectTeam类中使用了它,它是一个通用的List<Person>

  1. 我想知道如何在打算在我的项目中定义阶段的其他类中使用此ProjectTeam类?我正在考虑一个静态类,但我不知道如何使用它(p1.png)。

  2. 我应该遵循一个具有不同类的项目的概念,还是最好遵循一个解决方案的概念,在我的解决方案中使用一个用于不同项目(代表不同阶段)的类库。我已经在not-a-UML图(p2.png)中以图形方式显示了第二个想法。

我的课程:my classes

解决方案架构图:solution architecture diagram

namespace MyClassLibrary
{    public class Person
    {        public enum ERole { Admin, Head, InCharge }
        public string Name { get; set; }
        public ERole Role;
        private decimal rate = 15.00m;
        public decimal Rate
        {   get { return rate; }
            set{ if (rate >= 15.00m) { rate = value; } }
        }
        public Person()
        {
            this.Name = "";
            this.Role = ERole.InCharge;
            this.Rate = 15.00m;
        }
    }
}

namespace MyClassLibrary
{
    public static class ProjectTeam
    {
        public static List<Person> TeamMembers = new List<Person>();
        static ProjectTeam()
        {
            TeamMembers.Add(new Person() { Name = "APerson",
                                           Role = Person.ERole.Admin,
                                           Rate = 30.00m });

            TeamMembers.Add(new Person() { Name = "BPerson",
                                           Role = Person.ERole.Head,
                                           Rate = 25.00m });

            TeamMembers.Add(new Person() { Name = "CPerson",
                                           Role = Person.ERole.InCharge,
                                           Rate = 15.00m });

        }

    }
}


namespace MyClassLibrary
{
    public class Project
    {
        public string ProjectName { get; set; }
        public int ProjectNumber{ get; set; }
        public string ProjectScope { get; set; }


    }
}
c# oop static relationship
3个回答
0
投票

尝试使用单例。这是众所周知的模式,非常有用。本质上,单例是一个类,它仅允许创建其自身的单个实例,并且通常提供对该实例的简单访问。实现看起来像这样:

    public sealed class Singleton
{
    private static Singleton m_oInstance = null;
    private int m_nCounter = 0;

    public static Singleton Instance
    {
        get
        {
            if (m_oInstance == null)
            {
                m_oInstance = new Singleton();
            }
            return m_oInstance;
        }
    }

    public void DoSomething()
    {
        Console.WriteLine("Hello World {0}!", m_nCounter++);
    }

    private Singleton()
    {
        m_nCounter = 1;
    }
}

然后您可以通过这种方式访问​​它:

Singleton.Instance.DoSomething();

0
投票

如果您有3个不同的项目要引用DLL,请执行以下操作:

1-在解决方案资源管理器中,您要在其中使用库的每个项目下,右键单击“引用”节点,然后单击“添加引用”

2-在出现的引用管理器的左侧,单击“项目”

3-单击库项目的复选框。这会将您的库的引用添加到您要使用该库的项目中。

4-现在要在您的项目中使用ProjectTeam类,将其添加到.cs文件的顶部:

using MyClassLibrary;

5-现在您可以在其中一个函数中添加以下代码以使用该ProjectTeam类:

ProjectTeam.TeamMembers.Add(new Person......)

6-然后对静态和非静态函数之间的差异进行一些研究。


0
投票

您可以为以下项目中的人员使用静态类

public static class Team
{

    public static List<Person> GetPersons()
    {
        var person = new List<Person>();
        person.Add(new Person() { Name = "testPerson" });
        return person;
    }

}
public class Person
{
    public string Name { get; set; }
}
public class Project
{
    public string Name { get; set; }
    public string Scope { get; set; }
    public List<Person> Person
    {
        get
        {

            return Team.GetPersons();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.