类方法可以为每个实例拥有不同的代码吗?

我想创建一个类(例如,人),并包含一个成员函数(例如,捐赠),但我希望这个方法的内容在每个类的实例中有所不同,以模拟人工智能。这是可能的吗?我应该在什么时候以及如何为每个实例的方法填充代码?

这是一个例子:

public class Person{    // 数据成员    private int myNumOfKids;    private int myIncome;    private int myCash;    // 构造函数    public Person(int kids, int income, int cash)    {        myNumOfKids = kids;        myIncome = income;        myCash = cash;    }    // 问题中的成员函数    public int giveCharity(Person friend)    {        int myCharity;        // 这里我想为每个人输入不同的代码        // 以决定他们将根据朋友的信息(孩子数、收入、现金等)        // 以及他们自己的同情倾向,给朋友多少捐赠。        myCash -= myCharity;        return myCharity;    }}Person John = new Person(0, 35000, 500);Person Gary = new Person(3, 40000, 100);// John给Gary一些捐赠Gary.myCash += John.giveCharity(Gary);

回答:

我想到了两种主要的方法:

1) 为每个人提供一个定义函数的委托:

public Func<int> CharityFunction{get;set;}

然后你只需要弄清楚如何设置它,并确保在使用之前总是设置好。要调用它,只需说:

int charityAmount = CharityFunction();

2) 将Person设为abstract类。添加一个抽象函数,如int getCharityAmount()。然后创建新的子类型,每个子类型提供该抽象函数的不同实现。

至于使用哪种方法,这将更多地取决于具体情况。你有很多不同函数的定义吗?第一种选项添加新函数时需要的努力较少。函数在对象创建后是否会改变?第二种选项不支持这一点,只有第一种选项可以。是否经常重用相同的函数?在这种情况下,第二种选项更好,这样调用者就不会不断地重新定义同一小组函数。第二种方法也更安全,因为函数总是有定义,而且你知道一旦对象创建后它就不会被改变,等等。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注