C#从当前类访问另一个类的属性

时间:2017-01-11 16:19:05

标签: c#

我真的很陌生,所以我希望我的问题不是愚蠢的。

我有这样的情况:

Public class ClassName
{

public ClassName(){}

public string Name {get; set;}
public SomeOtherClass class {get; set;} 

}

public class SomeOtherClass ()
{
public int StatusId {get; set;}
public string StatusDesc { get; set;}
}

现在这两个类都在一个cs文件中。 我想通过ClassName访问SomeOtherClass的属性。

我该怎么做?

非常感谢。

我认为我需要添加控制器以使其更清晰:

这是控制器功能:

public void UpdateSession(SessionDetails requestModel)
{

    using (Entities tokus = new Entities())
    {

        var sessionDetails = requestModel;


        switch (sessionDetails.ServiceType)
        {
            case "Provider Service":

                var fafa = new ClassName();

            fafa.SessionID = sessionDetails.SessionID;
            fafa.SessionStatusID = sessionDetails.SessionStatus;
            fafa.StartDate = sessionDetails.StartDate;
            fafa.EndDate = sessionDetails.EndDate;
                fafa.class.AttendanceStatusID = sessionDetails.subclassfromSessionDetails.AttendanceStatus;

            UpdateServiceLog(fafa);

最后一个fafa.Providers.AttendanceStatusID = sessionDetails.staff.AttendanceStatus;给我一些未定义的线条作为错误。为什么它不能识别这个子类???

UpdateServiceLog是另一个需要ClassName作为输入的函数。

5 个答案:

答案 0 :(得分:1)

好的,首先,我想快速概述原始代码中的错误,以帮助您了解为什么会出现波浪线......

Public class ClassName  // "Public" needs to be lowercase
{
   public ClassName(){}

   public string Name {get; set;}
   public SomeOtherClass class {get; set;}  // "class" is a reserved word and
                                            // can't be used as a property name.
                                            // You're probably getting a squiggly here.
}

public class SomeOtherClass ()  // A class declaration doesn't end in parentheses
                                // This will give you some more squigglys.
{
   public int StatusId {get; set;}
   public string StatusDesc { get; set;}
}

以下是更正后的代码:

public class ClassName
{
    public ClassName() { }

    public string Name { get; set; }
    public SomeOtherClass OtherClass {get; set;}
}

public class SomeOtherClass
{
    public int StatusId { get; set; }
    public string StatusDesc { get; set; }
}

现在您可以在控制器中使用这些类:

    switch (sessionDetails.ServiceType)
    {
        case "Provider Service":
           var foo = new ClassName();
           foo.Name = sessionDetails.SessionName;
           foo.OtherClass.StatusId = sessionDetails.subclassfromSessionDetails.SessionStatusId;
           foo.OtherClass.StatusDesc = "Kerfuffle";
           break;
        // More cases here...
    }

请注意,我已使用您在原始代码中提供的属性来指出语法错误。从您的控制器代码中可以看出,您最终将拥有不同的属性名称(SessionStatusIDStartDate等)。由于我不知道sessionDetails中的属性类型可能存在类型不匹配,因此请将上述代码纯粹作为分配值的进程的示例。

答案 1 :(得分:0)

一个类通常代表一个真实世界的对象,例如" car"。如果你有十辆车,那么你需要十个汽车类的实例。如果使用此模式,则需要在第一个类中创建SomeOtherClass的实例才能使用它。你已经在你的例子中做过了 - 你有一个SomeOtherClass的实例叫做" class"。要访问其中一个属性,您可以说class.StatusID或class.StatusDesc。

Public class ClassName
{

    public ClassName(){}

    public string Name {get; set;}
    public SomeOtherClass class {get; set;} 

    public bool SampleMethod() 
    {
        if (class.StatusId == 1)
            return true;
        else
            return false;
    }

}

public class SomeOtherClass ()
{
    public int StatusId {get; set;}
    public string StatusDesc { get; set;}
}

请注意,如果你有10个SomeOtherClass类型的变量,它们都可以有不同的StatusId,就像十种不同的汽车可以有十种不同的颜色一样。您深入研究您感兴趣的特定实例。

答案 2 :(得分:0)

这是介绍性内容,我强烈推荐教程并浏览MSDN

你基本上有三种选择。您可以使用已有的代码并以这种方式检查属性:

var x = new ClassName();
var whatWeWant = x.SomeOtherClass.StatusID;

您可以这样做,因为它是public属性。

在其他情况下,inherit会更好。如果一个类是另一个类的子类(即" Automobile"作为超类," Sedan"作为子类),则可以这样做

Public class ClassName : SomeOtherClass
{

public ClassName()
{
public string Name {get; set;}
public SomeOtherClass class {get; set;} 

}

public class SomeOtherClass ()
{
public int StatusId {get; set;}
public string StatusDesc { get; set;}
}

并调用该属性,就好像它只是ClassName的一部分:

var x = ClassName.StatusId;

最后,您可以声明一个为staticStatic类,值和方法在概念上类似于" global"。你没有实例化它们,但你几乎可以在任何地方调用它们。需要注意的是,它们的价值仍然存在;如果两个东西调用相同的static属性,它们将获得相同的值。如果不需要,您需要上述方法。

Public class ClassName
{

public ClassName()
{
public string Name {get; set;}
public SomeOtherClass class {get; set;} 

     public string GetOtherClass()
     { return SomeOtherClass.StatusDesc; }

}

public static class SomeOtherClass ()
{
public static int StatusId {get; set;}
public static string StatusDesc { get; set;}
}

答案 3 :(得分:0)

在更好地查看我的代码后,我意识到我有一个List的实例,因此我的映射无法正常工作。 所以,如果我有一个班级的实例作为财产,@ Kasun Koswattha方法是正确的。 因此,因为它是一个List,我必须在我的控制器中执行此操作:

TOK_ServiceLog fafa = new TOK_ServiceLog();

 fafa.Providers = sessionDetails.staff.Select(s => new TOK_ServiceLog_Provider()
                {
                    StaffID = s.StaffID,
                    ServiceID = s.ServiceID,
                    AttendanceStatusID = s.AttendanceStatusID,
                    IsSubstituted = s.IsSubstituted,
                    SubstituteStaffID = s.SubstituteStaffID,
                    Comments = s.Comments

                }).ToList();

NOte:提供商和员工都是列表。 其余的属性是直接分配的:

fafa.SessionID = sessionDetails.SessionID;
fafa.SessionStatusID = sessionDetails.SessionStatus;
fafa.StartDate = sessionDetails.StartDate;
fafa.EndDate = sessionDetails.EndDate;
fafa.ServiceName = sessionDetails.ServiceName;

再次感谢您的所有输入。

答案 4 :(得分:-2)

首先,您需要从两个类创建新对象。然后将Someotherclass分配给Classname类中的属性。然后,您可以访问SomeotherClass的属性。请参阅以下代码。

var className= new ClassName()
{
 SomeOtherClass=new SomeOtherClass()
};

var statisId=className.SomeOtherClass.StatusId;

如果这可以解决您的问题,请告诉我。