2 回答

TA貢獻1890條經驗 獲得超9個贊
根據您顯示的代碼示例,答案是您不能。您需要能夠IDontHaveControlOverThis.ArgumentClass通過設置屬性或創建具有不同構造函數參數的新實例來修改 的行為,以便修改服務調用。(現在它總是返回相同的字符串,因此服務調用始終相同)
如果您能夠通過設置屬性來修改 ArgumentClass 的行為。您可以在自己的代碼中為密封類創建包裝器,并在整個代碼庫中使用它。
public class MyArgumentClass
{
// TODO: Set this to a useful value of ArgumentClass.
internal IDontHaveControlOverThis.ArgumentClass InnerArgumentClass { get; }
public virtual string AnyCall() => "???";
}
public class MyServiceClass
{
private IDontHaveControlOverThis.ServiceClass innerServiceClass
= new IDontHaveControlOverThis.ServiceClass();
public virtual string ServiceCall(MyArgumentClass argument)
{
return innerServiceClass.ServiceCall(argument.InnerArgumentClass);
}
}
或者
public class MyArgumentClass
{
public virtual string AnyCall() => "???";
}
public class MyServiceClass
{
private IDontHaveControlOverThis.ServiceClass innerServiceClass
= new IDontHaveControlOverThis.ServiceClass();
public string ServiceCall(MyArgumentClass argument)
{
var serviceArgument = Convert(argument);
return innerServiceClass.ServiceCall(serviceArgument);
}
private IDontHaveControlOverThis.ArgumentClass Convert(MyArgumentClass argument)
{
// TODO: implement.
}
}

TA貢獻1828條經驗 獲得超6個贊
編譯器錯誤信息
無法將類型“MyCode.MyArgumentClass”隱式轉換為“IDontHaveControlOverThis.ArgumentClass”
注意:強調我的
應該給你一個關于你可以做什么的提示
public class MyArgumentClass {
? ? private IDontHaveControlOverThis.ArgumentClass arg = new IDontHaveControlOverThis.ArgumentClass();
? ? public String AnyCall() => $"MyArgumentCLass::AnyCall({arg.AnyCall()})";
? ? public static implicit operator IDontHaveControlOverThis.ArgumentClass(MyArgumentClass source) {
? ? ? ? return source.arg;
? ? }
}
所以現在你的“包裝器”根據需要公開了第 3 方依賴項
?IDontHaveControlOverThis.ArgumentClass myArg = new MyCode.MyArgumentClass();
或直接
var myArg = new MyCode.MyArgumentClass();
Console.WriteLine($"Result: {service.ServiceCall(myArg)}");
這可以允許抽象你的代碼
namespace MyCode {
? ? public interface IMyService {
? ? ? ? String ServiceCall(MyArgumentClass argument);
? ? }
? ? public class MyServiceClass : IMyService {
? ? ? ? public string ServiceCall(MyArgumentClass argument) {
? ? ? ? ? ? IDontHaveControlOverThis.ServiceClass service = new IDontHaveControlOverThis.ServiceClass();
? ? ? ? ? ? return service.ServiceCall(argument);
? ? ? ? }
? ? }
}
- 2 回答
- 0 關注
- 150 瀏覽
添加回答
舉報