在C#中,基类的虚方法可以被它的派生类覆盖或隐藏,例如
using System;
class A {
public virtual void M() {
System.Console.WriteLine("A");
}
}
class B: A {
public override void M() {
System.Console.WriteLine("B");
}
}
class C: A {
public new void M() {
System.Console.WriteLine("C");
}
}
cl
我需要一些设计逻辑的帮助,用一个例子来说明。下面是我的问题。
public class ChangeSet { }
public class NodeChangeSet : ChangeSet { }
public abstract class Base
{
protected abstract Action<ChangeSet> Do { get; }
}
public class Node:Base
{
private void doIt(NodeChangeSet change) { }
protected override Action<Nod
可能重复:
如果这是C# 101,请原谅,但是我正在尝试理解下面的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace Generics
{
class RabbitCollection : ArrayList
{
public int Add(Rabbit newRabbit)
{
return base.Add(
我想在抽象类中插入具有确切名称的虚拟方法。
在类中,即继承器重写方法,我可以重写:
基方法的返回类型。
方法的论证
让你知道,我真正想做的是这样的:
abstract class A
{
public virtual void Func1() { }
}
class B : A
{
override string Func1(int a, int b)
{
return (a + b).ToString();
}
}
我知道,C#需要在基类中使用返回类型/args,但是在这种情况下,可能有一些关键字new的提示吗?
我有一个基类,它定义
public class BaseClass
{
public virtual bool StartUpdate( Interface )
{ some code here }
}
然后,创建一个实现接口的类
public ClientClass : Interface {}
在派生类中
public class DerivedClass : BaseClass
{
public override bool StartUpdate( ClientClass )
{ some code... }
}
编译器(c#)在DerivedClas
我在我的c#项目的dll中有一个vb.net基类。我在c#中创建了一个派生类。我用它的所有属性填充C#类,包括来自vb类的基属性。
现在,我通过them服务(c# )将它们发送到jQuery客户端。但是在客户机上我只看到vb属性?
有谁有线索吗?
public class FilmItem : ContentItem // ContentItem is from VB DLL
{
public string Zender { get; set; }
public string Jaar { get; set; }
}
[WebMethod]
public IEn
好的,我有一个类,它包装了所有的WinAPI控件,使它们像Java/C#/.Net控件那样操作(是的,我知道已经有这样的库了),看起来像这样:
class Control
{
public:
//Bunch of other stuff..
virtual HWND GetHandle() const;
};
和一个派生类,如下所示:
class MenuBar: public Control
{
public:
//Bunch of other stuff..
virtual HMENU GetHandl
我正在尝试向C++中的嵌套结构中添加一些额外的字段,而设计要求通过继承来这样做。奇怪的是,我得到了一个错误,这取决于我是使用类型T*还是类型T**。我很困惑,希望有人能帮助我了解这里发生的事情。
嵌套的结构是Base::Node,我想将一个字段b添加到Base::节点中,然后使用主文件中所示的派生字段。当我将顶部的#define设置为0时,一切都会编译并正常工作。当我将#define更改为1时,我会得到以下编译器错误:
main_inhtest.cpp: In instantiation of ‘Derived<int>’:
main_inhtest.cpp:52: insta
我有一个基类 base 和一个从基类派生的类Derived1,还有一个派生类Derived2,它是从derived1派生的。
下面我已经提到了几个对象创建的例子(然后是类的多级继承)。有人能帮助我理解那些不可能创建对象的情况,以及为什么在C#中不可能创建对象?
Base b1 = new Base() //Possible
Base b1 = new derived1() // Possible
Derived1 d1 = new Base() // Not Possible
Derived1 d1 = new Derived1() // Possible
Derived2 d2 =
我有一个A类,它包含一个B类的对象作为属性。我希望派生类B,同时还希望确保类A中的属性指向派生类对象。因此,我想我需要派生类A,也重载该属性。下面是它的结构:
public class A {
public List<B> X{get; set;}
}
public class B {
}
public class C : B {
string extraProperty {get; set;}
}
public class D : A {
// I want property X to be of type C.
}
我尝试将类A中的属性X声明为虚拟的,然
由于在C#中,类只能从单个类派生,有没有一种方法可以这样做:
class Control
{}
class Button : Control
{}
class Slider : Control
{}
Button b = new Button();
Slider s = new Slider();
var base = (base) b;
var base2 = CastToBase(s);
我对此很好奇,因为我希望能够在不知道它们的基类的情况下做到这一点,例如在运行时。
我有一个用VB.net编写的基类,我正在我的C#项目中使用它。这个基类有一些属性,我必须在我的项目中给它们赋值。我在访问其中一个属性时遇到了问题。如下所示:
这是在基类中:
Public MustInherit Class FTPUploaderBase
{
Private _protocol As FTPProtocol
Protected Property Protocol() As FTPProtocol
Get
Return _protocol
End Get
Set(ByVal Value As FTPProtocol)
好的!我用、Java、和C#编写了相同的代码,但是输出不同!
class A
{
public void print()
{
Console.WriteLine("Class A");
}
}
class B : A
{
public void print()
{
Console.WriteLine("Class B");
}
}
class Program
{
static void Main(string[] args)
{
A a = n
我有以下代码,它编译没有任何错误或警告。
#include<iostream>
using namespace std;
class Father
{
public:
int foo()
{
cout<<"int foo";
return 111;
}
};
class Son: public Father
{
public:
long foo()
{
cout<<"long foo";
return 222;
}
};
我想知道调用打印"double in derived“的方法的原因是什么。我在C#规范中没有找到任何关于它的线索。
public class A
{
public virtual void Print(int x)
{
Console.WriteLine("int in base");
}
}
public class B : A
{
public override void Print(int x)
{
Console.WriteLine("int in derived");
我想为我的Base类初始化一个变量类,并且只在一些子类中修改它。
此类变量的初始化在header中:
class Base{
public:
Base();
int a = 1;
我的派生类的头是:
class ChildA : public Base{
public:
ChildA ();
int a = 2;
}
问题
我试着运行这个:
Base classe*;
classe = new ChildA();
std::cout << classe->a << std::endl;
问题是,它打印的不是我期望的2,而是1 (在父
我正在尝试弄清楚c#中影子的概念。这是我的代码,它的行为并不像我期望的那样:
public class Animal
{
public virtual void Foo()
{
Console.WriteLine("Foo Animal");
}
}
public class Dog : Animal
{
public new void Foo()
{
Console.WriteLine("Foo Dog");
}
}
class Program
{
static voi
我有一段代码(是从我的现实生活中设计出来的)
它无法编译,抱怨ExtendsB没有实现B::Run(A* a)。然而,理解A* Run();的扩展并没有问题。
class A { };
class ExtendsA : public A { };
class B
{
public:
virtual ~B(){}
virtual void Run(A* a) = 0;
virtual A* Run() = 0;
};
class ExtendsB : public B
{
public:
virtual ~ExtendsB(){}
// Not
我在浏览C# Brainteasers ()时遇到了一个问题:这段代码的输出应该是什么?
class Base
{
public virtual void Foo(int x)
{
Console.WriteLine ("Base.Foo(int)");
}
}
class Derived : Base
{
public override void Foo(int x)
{
Console.WriteLine ("Derived.Foo(int)");
}
public