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;
}
我不会在这里使用嵌套类,其目的通常只是限制嵌套类的范围。与普通类相比,嵌套类具有额外的私有修饰符的可能性(当然还有受保护的)。
基本上,如果您只需要在"父"类中使用这个类(就范围而言),那么通常将其定义为嵌套类是合适的。如果这个类可能需要在没有程序集/库的情况下从使用,那么用户通常更方便地将它定义为一个单独的(同级)类,无论这两个类之间是否存在任何概念关系。尽管在技术上可以创建嵌套在公共父类中的公共类,但在我看来,这很少是一个合适的实现方式。
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;
}
在这段代码中,您要做的是创建Client
、Employee
和Patient
对象的新对象,然后将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 .
}