[英]Is it possible in c# to access class instance having only property value?
可能這是一個愚蠢的問題,但是有可能實現這種情況嗎? 我有一個課,例如
public class Car
{
public string Make {get;set;}
public string Model {get;set;}
public decimal Price {get;set;}
public User Owner {get;set;}
}
其中所有者是其他地方的屬性設置,而不是我有一個功能
public static class Operations
{
public static void CalculateTaxes(decimal price)
{
....some code goes here and I want using reflection to access Owner,supposing that i will always pass price of a car
}
}
該函數將像這樣被調用
var car =new Car(){Price=25000,Make="BMW",Model="X6",Owner=new User(){"Sam Johnson"}};
Operations.CalculateTaxes(car.Price);
這只是一個偽造的代碼,在真實的應用程序中,我不想傳遞整個實例,但想要獲得車主的控制權,這是一個真正的目標嗎?
您的問題的答案很簡單而且很簡短:不。在任何情況下,這都是不可能的,因為C#是如何設計的。 謝謝Mads。
想象一下將整數傳遞給受損的第三方庫的安全隱患,並且這樣做會意外泄漏用戶憑據。
這里真正的問題是設計問題。 您的代碼不適合您的應用程序的需求。 重新考慮您的設計。
還要注意,盡管反射有很多用例,並且可以實現很多功能,但是在這種簡單的情況下,反射通常是多余的。 將反射用於元編程-而不用於業務邏輯。
不僅不能用作為值類型的decimal
來完成。 甚至類之類的引用類型也不起作用,因為(AFAIK)類無法跟蹤指向它們的所有對象(同一類實例可以是多個所有者的屬性)。
幸運的是,有一個簡單的解決方案-傳遞汽車實例本身,並從中提取價格。
public static void CalculateTaxes(Car car)
{
decimal price = car.Price;
...
}
如果需要使用Car
以外的類型調用此方法,則可以創建一個適當的接口並讓Car
實現它。 例如具有Owner
屬性的接口。 但是,由於您試圖獲得更多的汽車屬性,因此我假設這將僅用於Car
類型。
我想到了該解決方案,但現在正是我想要的,因為會有很多不同類型的屬性,並且每個屬性都應在不同的函數中進行處理,而我想使用點表示法傳遞它們,而不是像CalculateTax(car,"Price")
我認為最好的解決方案是使用局部函數,該函數可以訪問整個對象,例如
public static class Operations
{
public static void Operate(Car car)
{
calculateTaxes(car.Price);
void calculateTaxes(decimal price)
{
car.Owner is accessible here
}
void rateMake(string make)
{
so on and so on
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.