유형을 변경하는 방법은 무엇입니까?
-
12-11-2019 - |
문제
내 응용 프로그램에는 다음 클래스가 있습니다:
public class Widget {
public virtual int Id { get; set; }
public virtual WidgetType Type { get; set; }
public virtual string Parameters { get; set; }
}
public class WidgetType {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string ParametersAssembly { get; set; }
public virtual string ParametersClass { get; set; }
}
이제 특정 위젯에 대한 매개 변수를 업데이트하려는 경우 다음과 같이 말할 것입니다:
// Get the widget
var widget = GetWidget(1);
// Create an instance of the type parameters class
var parameters = Activator.CreateInstance(Assembly.LoadFrom(Server.MapPath("~/bin/"
+ widget.Type.ParametersAssembly + ".dll")).GetType(widget.Type.ParametersClass));
... Code here to update the parameters
widget.Parameters = new XmlSerializer(parameters.GetType()).Serialize(parameters);
나는 매개 변수를 얻고 자 할 때 그 반대를해야한다.당신은 이것이 매우 지루하게 상상할 수 있습니다.이 작업을 자동으로 수행 할 수 있는지 궁금했습니다.
나는 아이유저 타입 인터페이스를 찾고 있었다.나는 발견 기사 어떤 종류의 비슷합니다.그러나 내 문제는 위젯의 유형에 따라 내 유형이 변경됨에 따라 조금 더 복잡합니다.
누군가가 이것이 가능한지,그리고 그것이 어떻게 달성 될 수 있는지 알려줄 수 있다면 나는 그것을 감사 할 것입니다.감사
해결책
쉬운 방법
public class Widget
{
public virtual int Id { get; set; }
public virtual WidgetType Type { get; set; }
private string _serializedParameters;
private virtual string SerializedParameters {
get
{
return new XmlSerializer(Parameters.GetType()).Serialize(Parameters);
}
set
{
_serializedParameters = value;
// code to deserialize the Parameters and set to Parameters
var ptype = Assembly.LoadFrom(Server.MapPath("~/bin/" + widget.Type.ParametersAssembly + ".dll")).GetType(widget.Type.ParametersClass);
Parameters = Activator.CreateInstance(ptype);
}
}
private object _parameters;
public virtual object Parameters
{
get
{
if (_parameters == null)
_parameters = Activator.CreateInstance(Assembly.LoadFrom(Server.MapPath("~/bin/" + widget.Type.ParametersAssembly + ".dll")).GetType(widget.Type.ParametersClass));
return _parameters;
}
set { _parameters = value; }
}
}
그런 다음해야하기 때문에 매개 변수 속성에있을 수 없습니다 get -> alter -> set
대신 get -> alter
.그러나 매개 변수 객체를 구축하는 것은 매개 변수의 게터에 가야한다는 것이 옳습니다.왜냐하면 거기에서만 우리는 위지 타입을 로드 할 수 있기 때문입니다.
그것은 기본적으로 사용자 타입과 동일하지만 우리는 위지 타입이 있다는 것을 알고 있습니다.
제휴하지 않습니다 StackOverflow