我正在开发Windows 8 Phone应用程序,我有两件事,一件是Library项目,另一件是普通应用程序,让我先解释一下我的代码:
在图书馆计划中
class A
{
public static string empName ="ABC";
public static int empID = 123;
public virtual List<string> ListOfEmployees()
{
List<string> empList = new List<string>
empList.Add("Adam");
empList.Add("Eve");
return empList;
}
}
我在我的子项目中引用了库项目,我的子项和库项目有两个不同的解决方案。
在儿童申请中
class Properties : A
{
public void setValues(){
empName ="ASDF"
ListOfEmployees();
}
public override List<string> ListOfEmployees()
{
List<string> empList = new List<string>
empList.Add("Kyla");
empList.Add("Sophia");
return empList;
}
}
现在,在每个子应用程序中,我们App.xaml.cs
,这是每个项目的入口点。
在此App.xaml.cs
文件中,我正在创建此Properties and calling setValues method.
我在这里看到的只是静态变量值被覆盖但方法没有被覆盖。为什么?我在这里做错了吗?
我得到了ASDF并列出了Adam和Eve作为输出
但我需要ASDF并将Kyla和Sophia列为输出。
如何实现这一目标?
修改
我如何使用这些值:
在我的基地:
class XYZ : A
{
// now i can get empName as weel as the ListOfEmployees()
string employeeName = null;
public void bind()
{
employeeName = empName ;
ListOfEmployees(); // here is the bug where i always get Adam and Eve and not the Kyla and sophia
}
}
答案 0 :(得分:1)
现在我明白了,您想要从库中的 中调用覆盖值。
你不能用经典的C#机制做到这一点,因为你需要依赖注入。这些方面的东西:
// library
public interface IA
{
List<string> ListOfEmployees();
}
public class ABase : IA
{
public virtual List<string> ListOfEmployees() {}
}
public static class Repository
{
private static IA _a;
public static IA A
{
get { return _a = _a ?? new ABase(); }
set { _a = value; }
}
}
// in your app
class Properties : ABase
{
public override List<string> ListOfEmployees() { /* ... */ }
}
Repository.A = new Properties();
答案 1 :(得分:0)
将override关键字更改为new,您将获得您所追求的行为。查看this link以获取有关何时使用的更多信息。