C#属性以及如何从另一个函数/类访问它们的值

本文关键字:访问 函数 另一个 属性 | 更新日期: 2023-09-27 18:22:11

这是我第一次尝试使用属性,遇到了障碍,我花了很多时间寻找示例。这可能是因为我做这件事完全错了。

我有一个设置所有属性的方法。

public class wsBase : Page
{
    public class Client
    {
        public DateTime AppointmentDate{ get; set; }
        public int TIN { get; set; }
        public string Username { get; set; } 
        public string Password { get; set; }
    }
    public class Employee
    {
        public int SSN { get; set; }
    }
    public class Patient
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime DOB { get; set; }
        public int Gender { get; set; }
    }
}

设置功能:

public void SettingAppointmentData(int employeeID, DateTime ApptDt, DateTime patientDOB, string patientFname, string patientLname, int patientgender)
    {
        wsData wsD = new wsData();
        Client cli = new Client();
        Employee emp = new Employee();
        Patient pat = new Patient();
        pat.DOB = patientDOB;
        patientFname = ValidateName(patientFname);
        patientLname = ValidateName(patientLname);
        pat.FirstName = patientFname;
        pat.LastName = patientLname;
        pat.Gender = patientgender;
     }

我的问题在于试图访问这些设置的参数。下面是试图访问参数的函数示例。下面不起作用,我知道我处理得不对。如何从这些属性访问属性集?

public bool eligibleAppointment()
{
        wsBase.Client cli = new wsBase.Client();
        wsBase.Employee emp = new wsBase.Employee();
        wsBase.Patient pat = new wsBase.Patient();
        DateTime DOB = pat.DOB;
        DateTime appt = cli.AppointmentDate;
}

C#属性以及如何从另一个函数/类访问它们的值

我不会在这里使用嵌套类,其目的通常只是限制嵌套类的范围。与普通类相比,嵌套类具有额外的私有修饰符的可能性(当然还有受保护的)。

基本上,如果您只需要在"父"类中使用这个类(就范围而言),那么通常将其定义为嵌套类是合适的。如果这个类可能需要在没有程序集/库的情况下从使用,那么用户通常更方便地将它定义为一个单独的(同级)类,无论这两个类之间是否存在任何概念关系。尽管在技术上可以创建嵌套在公共父类中的公共类,但在我看来,这很少是一个合适的实现方式。

public bool eligibleAppointment()
{
        wsBase.Client cli = new wsBase.Client();
        wsBase.Employee emp = new wsBase.Employee();
        wsBase.Patient pat = new wsBase.Patient();
        DateTime DOB = pat.DOB;
        DateTime appt = cli.AppointmentDate;
}

在这段代码中,您要做的是创建ClientEmployeePatient对象的新对象,然后将Client.AppointmentDate分配给appt。这将把该特定属性设置为DateTime.MinValue,因为您以前没有给AppointmentDate赋值;它会假设它的默认值,从我的头顶上看是CCD_。

你真正想做的是这样的事情:

    public class Client
    {
        public DateTime AppointmentDate { get; set; }
        public int TIN { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
    }
    private Client _client = new Client();
    public bool EligibleAppointment()
    {
        _client.AppointmentDate = DateTime.Today; // Or something. This way you'll assign DateTime.Today to the AppointmentDate of this specific _client object.
        return _client.AppointmentDate > DateTime.MinValue; // Or whatever.
    }

通过这种方式,您将实际创建Client类的对象,然后可以使用该特定对象的AppointmentDate的setter。你可以给它分配任何你喜欢的DateTime值,然后再使用它。如果你想从这些属性中获得值(调用getter),你只需要使用_client.AppointmentDate并对它们做任何你需要做的事情。

这里应该考虑的是对象声明的范围及其寿命。例如,当您执行以下操作时:

public void Foo()
{
    var client = new Client();
    // As soon as Foo() stops executing, client will be disposed, and client.Username won't be SomeUser anymore.
    // Reason being is that it's declared on a scope local to Foo(), its lifespan is the duration of the method execution.
    client.Username = "SomeUser";
} 

另一方面,如果在外部范围中分配Client对象,则数据将保留以备以后使用,如下所示:

private Client _client = new Client();
public void Foo()
{
    // Since _client is declared in the outer scope now, the data we assign to _client.Username
    // below will still be there even when Foo() finished execution.
    _client.Username = "SomeUser";
} 
public void Bar()
{
    // This'll still give us "SomeUser", since the object is still "alive" since we've called Foo().
    Console.WriteLine("Username: " + _client.Username);
}

您可能想了解MSDN上.NET中变量和方法作用域的工作原理。

顺便说一句,我个人不会在这个特定的实现中使用嵌套类,因为封闭类型除了包含其他类型的之外没有任何用途,这几乎不是一个好的实践。在对你的问题的评论中,有一篇关于这一点的文章,我相信如果你想更多地阅读它的话。

除了关于正确设置类的注释之外。

所以你真的想做这个或类似的事情:

Client cli = new Client();
Employee emp = new Employee();
Patient pat = new Patient();
public bool eligibleAppointment()
{
        cli.Client = "something";
        emp.Employee = "something";
        pat.Patient = "something";
        DateTime DOB = pat.DOB;
        DateTime appt = cli.AppointmentDate;
}

希望这能让你朝着正确的方向前进。

public class wsBase : Page
{
public Client client {get;set;}
public Employee employee {get ; set;}
public Patient patient{get;set;}
// your existing code here 
}
public bool eligibleAppointment()
{
// Write your logic here .
}