2013-04-25 52 views
0

我想重写一个虚拟函数只为一个定义的元素(而不必创建另一个类,实现它,然后添加一个函数来覆盖它..)。C#覆盖虚拟函数,而不必实现另一个类

例子:

public class MyClass 
{ 
    public virtual bool ChangeStatus(String status) 
    { 
     return false; 
    } 
} 


void test() 
{ 
    //The following is written as an example of what I am trying to achieve & does not work 
    MyClass blah = new MyClass() 
    { 
     public override bool ChangeStatus(String status) 
     { 
      return true; 
     } 
    }; 
} 

任何想法如何实现这一目标?

谢谢。

+0

我不明白你为什么要重写相同的功能相同的类,重写给相同的签名功能赋予新的含义,其中类是根据需要继承的。 – brykneval 2013-04-25 05:37:46

+0

@brykneval:对于API,“void test()”部分将用于不同的程序集。这是否清除它? – LouisTakePILLz 2013-04-25 05:44:26

回答

0

,如果你有超过MyClass控制,可以让所需的方法调用可以替代在运行时每一个对象的委托......

class MyClass 
{ 
    public void Func<SomeParameterType,SomeReturnType> myDelegate {get;set;} 
    public SomeReturnType myFunction(SomeParameterType parameter) 
    { 
     if(myDelegate==null) 
      throw new Exception(); 
     return myDelegate(parameter); 
    } 
} 

... 

MyClass obj = new MyClass(); 
SomeParameterType p = new SomeParameterType(); 
obj.myDelegate = (x)=>new SomeReturnType(x); 
SomeReturnType result = obj.myFunction(p); 
+0

这几乎是我所期待的,甚至认为,这不是我直接问到的。每当有时间我都会试试这个。编辑:可悲的是,我没有足够的声望来“解决”你的答案。 – LouisTakePILLz 2013-04-25 05:34:08

+0

为什么要创建相关的委托类?在命名空间中定义它... – 2013-04-25 05:36:43

+0

@ bash.d:我正在使用这个API ...我不知道这是否回答你的问题......是吗? – LouisTakePILLz 2013-04-25 05:41:48

1
0

C#是严格建立在类的概念。你不能创建一个没有类的函数/方法。
此外,virtual/override意味着继承,所以你必须从这个类派生。

+0

这不完全是真的......你可以有一个没有围绕它的类的功能/方法...想到代表 – DarkSquirrel42 2013-04-25 05:23:14

+0

这与问题完全没有关系......这是关于重写不创建代表或东西! – 2013-04-25 05:27:35

+0

确定的事情...... op说他是**试图**重写......那是行不通的......然后他要求**任何关于如何实现效果的想法...... – DarkSquirrel42 2013-04-25 05:32:57

0

你不能override没有inheriting the class函数,virtual function整点是,它可以在child classoverridden

如果你正在使用同一个类来完成它,你会不会最终为这个类写一个简单的方法/函数?

所以,遵循OOP编程概念,它被设计为简单&易于编程Instead simply inherit the class and override the function

+0

其实,他们不在课堂上。我在原始文章中写的片段没有任何上下文,它既不包含在命名空间中,也不包含在父类中,它只是展示我想要实现的内容。 – LouisTakePILLz 2013-04-25 05:32:04

相关问题