假设您具有这样的类关系:
class Banana : Fruit { }
如果已经为水果分配了一些公共全局值,是否有办法让新的香蕉类继承这些现有值?
例如:
class Fruit
{
public int price;
public string origins;
}
class banana : fruit
{
public string peelDensity;
public Fruit (peelDensity p, int pr, string o)
{
peelDensity = p;
price = pr;
o = origins;
}
}
说一个现有的水果实例已经分配了price
,origins
等。假设这实际上是适用于特定香蕉的常见水果数据。香蕉将如何继承这些价值?
是否有比需要提供构造函数中所有现有值更好的方法?
banana b = new banana(peel, price, origins);
有没有一种方法可以对复制构造函数执行以下操作:
public Banana(Fruit fruit){ this = fruit; }
上面只是一些伪代码。在我的项目中,我的Fruit类已经分配了20多个值,并且Banana类应该继承所有这些值,但是我想弄清楚是否有更好的方法编写更优雅的构造函数类。
答案 0 :(得分:1)
使用复制构造函数和工厂方法有两种常用方法。
复制构造函数:
public Banana(Fruit fruit)
{
Price = fruit.Price;
Origin = fruit.Origin;
}
Fruit apple = new Fruit(50, "some origin");
Banana banana = new Banana(apple);
工厂方法:
public static class FruitFactory
{
public static Banana BananaFromFruit(Fruit fruit)
{
return new Banana(fruit.Price, fruit.Origin);
}
}
Fruit apple = new Fruit(50, "some origin");
Banana banana = FruitFactory.BananaFromFruit(apple);
请注意,我更正了类的大小写及其属性,以遵循c#约定。
答案 1 :(得分:1)
您可以执行以下操作:
public class Fruit
{
public int Price { get; set; }
public string Origins { get; set; }
}
public class Banana : Fruit
{
public string peelDensity;
public static Banana AsBanana(Fruit f)
{
return f as Banana ?? new Banana { Price = f.Price, Origins = f.Origins };
}
}
静态方法允许返回“水果”作为香蕉。如果香蕉已经存储在类型为Fruit的变量中,则它将作为香蕉返回。如果没有,将创建一个新的香蕉并复制值。
如果要将水果转换为香蕉,只需像这样称呼它:
Banana b = Banana.AsBanana( myFruit);
香蕉始终可以分配给声明为水果的变量,反之亦然。这是面向对象开发的重点之一。
答案 2 :(得分:0)
据我所知,我认为您与此有关:
minikube start
kubectl config use-context minikube
kubectl create ns my-namespace
这是您的孩子班级:
This is your base class
public class Fruit{
public double Price { get; set; }
public string Origins { get; set; }
//or you can create a constructor
//one default constructor
public virtual void GetPrice()
{
Price = 69;
}
}
只需添加一些技巧,由于您的Fruit类非常通用,您可以将其设置为 Abstract Class (可以与其子类继承的抽象方法的集合),但是有很多方法提取抽象类的方法,并且仅在需要时为构造函数设置默认值。
答案 3 :(得分:0)
@JC Borlagdan提到的另一种方法是创建一个香蕉工厂,该工厂又会创建具有某些特定属性的香蕉对象。 然后,每个继承都有一个单独的工厂来处理默认属性。
您可以简单地用Google搜索工厂模式。有很多示例和解释。
工厂也可以是一种方法,不必存在于类中。 这是一个小例子:
class BananaFactory {
public int price;
public string origins;
Banana CreateBanana() {
return new Banana(){
peelDensity = "SomeValue",
price = price,
origins = origins
};
}
}
var banana = bananaFactoryinstance.CreateBanana();
// banana has price and origins that are set in the factory