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

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

这是一个例子:

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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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