我的项目中有许多控制器,它们都是从一个名为BaseController的控制器继承的.我编写了一个自定义属性,我将其应用于整个BaseController类,因此每次操作都在我的任何控制器中运行时,该属性将首先运行.
问题是我有几个控制器动作,我想忽略该属性,但我不知道该怎么做.
有人可以帮忙吗?我正在使用MVC 1.
谢谢.
我需要使用JAXB通过XML创建一系列Java对象,这些对象都扩展了已创建的公共基类(不使用JAXB).例如,假设我有以下我正在尝试生成的JAXB类:
Penguin.xml -> Penguin.java
Robin.xml -> Robin.java
Cardinal.xml -> Cardinal.java
Run Code Online (Sandbox Code Playgroud)
我已经有一个现有的基类Bird.java,我希望上面的三个类能够扩展.
做这个的最好方式是什么?
谢谢你的帮助!
我已经看到了两种new在派生类中实现该方法的方法.
方法一:
sub new {
my $invocant = shift;
my $class = ref($invocant) || $invocant;
my $self = {};
bless($self, $class);
$self = $self->SUPER::new( @_ );
return($self);
}
Run Code Online (Sandbox Code Playgroud)
方法二:
sub new {
my $self = shift;
my $class = ref($self) || $self;
return $self if ref $self;
my $base_object = $class->SUPER::new(@_);
return bless ($base_object, $class);
}
Run Code Online (Sandbox Code Playgroud)
我不确定我明白它的区别.有人可以解释一下吗?
根据您的评论和答案,我可以看到该ref()部分很糟糕.
但是使用SUPER::new(@_)呢?在第一个例子中,hashref保佑到派生类,然后该对象的SUPER的new被调用,并保存到相同的对象.
在另一方面,第二实例中,基对象是从类的创建SUPER小号new方法和被祝福入新的类.
这两种方式有什么区别?看起来第一个用基础对象覆盖对象.第二个似乎是"双重祝福".我糊涂了.
我有以下代码:
public class BaseClass
{
public string A { get; set; }
}
public class DerivedClass : BaseClass
{
public string B { get; set; }
}
List<DerivedClass> _derivedClass = new List<DerivedClass>()
{
new DerivedClass()
{ A = "test1",
B = "test2"
}
};
List<BaseClass> _baseClass = _derivedClass.Cast<BaseClass>.ToList();
Run Code Online (Sandbox Code Playgroud)
代码编译没有任何错误,但是,我希望_baseClass只包含属性A(类型的对象BaseClass),但它同时返回A和B属性(类型的对象DerivedClass).我错过了什么以及将派生类的List转换为其基类列表的正确方法是什么?
谢谢.
有没有一种方法,派生类只能继承所有基类成员中的一些......在C#中?如果可以进行此类操作,请提供一些示例代码.
尝试使用模板继承时,我遇到了一个奇怪的错误.这是我的代码:
template <class T> class A {
public:
int a {2};
A(){};
};
template <class T> class B : public A<T> {
public:
B(): A<T>() {};
void test(){ std::cout << "testing... " << a << std::endl; };
};
Run Code Online (Sandbox Code Playgroud)
这是错误:
error: use of undeclared identifier 'a'; did you mean 'std::uniform_int_distribution<long>::a'?
void test(){ std::cout << "testing... " << a << std::endl; }
Run Code Online (Sandbox Code Playgroud)
如果它可能影响我使用这些标志的东西:
-Wall -g -std=c++11
Run Code Online (Sandbox Code Playgroud)
我真的不知道出了什么问题,因为与没有模板的纯类相同的代码工作正常.
我遇到的问题是我捡起一个掉落的物品,给枪添加弹药。
使用所有方法和变量构建了一个 Gun 类。构建了一个从 Gun 类派生的 Rifle 类 The Rifle 完美无缺
我现在正在添加一个“拾取”系统,其中 x 数量的敌人会掉落拾取物。
这是要拾取的项目上的脚本
public class AddARAmmo : MonoBehaviour
{
private Rifle rifle;
private void Awake()
{
rifle = FindObjectOfType<Rifle>();
}
private void OnTriggerEnter(Collider other)
{
if (other.tag == string.Format("Player"))
{
rifle.AddAmmo(30);
Destroy(gameObject);
}
}
}
Run Code Online (Sandbox Code Playgroud)
步枪和枪的脚本有点长,但这里是枪基类中的相关内容是公共抽象类......
public int bulletsInStock;
public void AddAmmo(int ammoToAdd)
{
bulletsInStock += ammoToAdd;
UpdateAmmo();// updates on screen Ammo
}
......
Run Code Online (Sandbox Code Playgroud)
然后在步枪班
public override void Modifiers() // This is where the guns starts are stored …Run Code Online (Sandbox Code Playgroud) 在C#中,如下面的代码片段所示,在声明类A时扩展接口IFoo是正确/正确的,知道类BaseClass扩展了接口IFoo吗?是否有必要在此处指定接口IFoo,这是最佳做法吗?
class A : BaseClass, IFoo
{
}
Run Code Online (Sandbox Code Playgroud)
可能是一个愚蠢的问题,但在这种情况下适当的做法是什么?
c# inheritance interface base-class interface-implementation
我有类似这样的课程
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
A a = new C();
a.method();
Console.ReadLine();
}
}
public class A
{
public virtual void method()
{
Console.WriteLine("METHOD FROM A");
}
}
public class B : A { }
public class C : B
{
public override void method()
{
Console.WriteLine("METHOD FROM C");
}
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,打印"METHOD FROM C"
但
如果我有这样的情况
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
A a = new C(); …Run Code Online (Sandbox Code Playgroud) class baseClass():
def __init__(self,mark,name):
self.mark = mark
self.name = name
class derivedClass(baseClass):
b1 = derivedClass(name='Jibin')
print b1.name
Run Code Online (Sandbox Code Playgroud)
这是我的代码最初和它工作正常.
(注意:我无权访问baseClass)
但后来我不得不通过一个附加的属性rank来derivedClass.所以我编辑这样的代码.
class baseClass():
def __init__(self,mark,name):
self.mark = mark
self.name = name
class derivedClass(baseClass):
def __init__(self,rank):
self.rank = rank
b1 = derivedClass(name='Jibin')
print b1.name
Run Code Online (Sandbox Code Playgroud)
这导致了错误 __init__() got an unexpected keyword argument 'name'
这是预期的__init__,derivedClass因为没有争论name.
我不想额外的参数添加name到__init__的derivedClass实时b'cos baseClass有十个参数,而不是2(标志,名称),如果我给他们都作为附加参数 derivedClass,我会搞乱参数列表.
注意:我知道使用baseClass.__init__(self)或初始化baseClasssuper(derivedClass, self).__init__()
base-class ×10
c# ×5
inheritance ×4
asp.net-mvc ×1
c++ ×1
class ×1
interface ×1
invoke ×1
jaxb ×1
marshalling ×1
members ×1
methods ×1
new-operator ×1
oop ×1
perl ×1
polymorphism ×1
python ×1
super ×1
templates ×1