簡體   English   中英

C#從當前類訪問另一個類的屬性

[英]C# Accessing another class's properties from current class

我真的很陌生,所以我希望我的問題不會傻。

我有這樣的情況:

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作為輸入的函數。

好的,首先,我想快速概述一下原始代碼中的錯誤,以幫助您了解為什么會出現彎曲的線條...

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內部屬性的類型,因此可能存在類型不匹配的情況,因此請純粹將上述代碼作為分配值過程的示例。

類通常代表現實世界中的對象,例如“汽車”。 如果您有十輛汽車,那么您需要十個汽車類實例。 如果使用此模式,則需要在第一個類中創建SomeOtherClass的實例才能使用它。 在示例中,您已經完成了此操作-您有一個名為“ class”的SomeOtherClass實例。 要訪問其屬性之一,您可以說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;}
}

請注意,如果您有十個SomeOtherClass類型的變量,它們都可以具有不同的StatusId,就像十輛不同的汽車可能具有十種不同的顏色一樣。 您可以向下鑽取感興趣的特定實例。

這是介紹性的內容,我強烈建議您使用教程並瀏覽MSDN

您基本上有三個選擇。 您可以使用已有的代碼,並通過以下方式檢查屬性:

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

您可以這樣做,因為它是public財產。

在其他情況下,最好inherit 如果一個類是另一類的子類,則可以這樣做(例如,“汽車”為超類,而“轎車”為子類)

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;

最后,您可以聲明一個為static Static類,值和方法在概念上類似於“ 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;}
}

在更好地查看代碼后,我意識到我有一個List實例,因此我的映射無法正常工作。 因此,如果我將類的實例作為屬性,則@Kasun Koswattha方法是正確的。 因此,因為它是一個列表,所以我必須在控制器中執行以下操作:

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();

注意:提供者和工作人員都是列表。 其余屬性直接分配:

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

再次感謝您的所有投入。

首先,您需要從兩個類中創建新對象。 然后將Someotherclass分配給Classname類中的屬性。 然后,您可以訪問SomeotherClass的屬性。 請參見下面的代碼。

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

var statisId=className.SomeOtherClass.StatusId;

讓我知道這是否可以解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM