[英]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...
}
請注意,我已經使用了您在原始代碼中提供的屬性來指出語法錯誤。 從控制器代碼中可以明顯看出,最終您將擁有不同的屬性名稱( SessionStatusID
, StartDate
等)。 由於我不知道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.