-
public class BaseClass
{
Dictionary<Type, object> propertys = new Dictionary<Type, object>();
public void Add<T>(T instance)
{
propertys[typeof(T)] = instance;
}
public T Get<T>()
{
return (T)propertys[typeof(T)];
}
public void Test()
{
Add<string>("Hello World");
string helloWorld = Get<string>();
}
}
- / .
, .
, (er). ,
using System.Linq.Expressions;
public interface IBaseClassExtension
{
public string ExtensionProperty { get; set; }
public int ExtensionProperty2 { get; set; }
}
public class BaseClass
{
Dictionary<string, object> propertys = new Dictionary<string, object>();
public void Add<T, U>(Expression<Func<T, U>> expr, U instance)
{
var propExpr = expr.Body as MemberExpression;
propertys[propExpr.Member.Name] = instance;
}
public U Get<T, U>(Expression<Func<T, U>> expr)
{
var propExpr = expr.Body as MemberExpression;
return (U)propertys[propExpr.Member.Name];
}
public void Test()
{
Add<IBaseClassExtension, string>(bce => bce.ExtensionProperty, "Hello World");
string helloWorld = Get<IBaseClassExtension, string>(bce => bce.ExtensionProperty);
}
}
,
# 6.0, , . .
public interface IBaseClassExtension
{
public string ExtensionProperty { get; set; }
public int ExtensionProperty2 { get; set; }
}
public class BaseClass
{
Dictionary<string, object> propertys = new Dictionary<string, object>();
public void Add(string name, object instance)
{
propertys[name] = instance;
}
public T Get<T>(string name)
{
return (T)propertys[name];
}
public void Test()
{
Add(nameof(IBaseClassExtension.ExtensionProperty), "HelloWorld");
string helloWorld = Get<string>(nameof(IBaseClassExtension.ExtensionProperty));
}
}
Edit:
/ ,
public class BaseClass
{
}
public class BaseClass<T, U, V> : BaseClass
{
public T Extension1 { get; set; }
public U Extension2 { get; set; }
public V Extension3 { get; set; }
}
public class ClassThatIsUsingSpecificBaseClass
{
public void Test(BaseClass<int, int, string> baseClass)
{
}
}
public class ClassThatIsUsingBaseClass
{
public void Test(BaseClass baseClass)
{
}
}
typeafe, , BaseClass, /