如何从非父级调用抽象类

时间:2016-05-30 08:18:09

标签: c# abstract-class abstract

我有一个名为' Player'的非抽象类,以及一个名为' Score'的抽象类。使用'组合'的子类。在组合中,在其他子类中使用了抽象方法。

如何从非父方法调用我的抽象方法'播放器'没有让它们静止?

// This is the abstract method within Combination, 
// it uses the face values from rolled dice to calculate the score.

abstract public int CalculateScore(int[] faceValues);

//Array of 'Score's in Player

private Score[] scores = new Score[10];

3 个答案:

答案 0 :(得分:0)

你做不到。这是访问修饰符,它旨在缩小对类的访问。要在您的情况下使用它,我建议您将abstract类的public Score的可访问性更改为app.controller("myCtrl", function($scope) { //this is my controller $scope.type = "type"; $scope.swapChartType = function(type) { //function for line chart and bar chart on button click if ($scope.type == 'line') { $scope.type = 'bar' } else { $scope.type = 'line'; } alert($scope.type); } // this is my directive app.directive('hcLine', function() { return { restrict: 'CAE', replace: true, scope: { items: '=', title:'=', chartType: '=', //not working }, controller: function($scope) {}, template: '<div></div>', link: function(scope, element, attrs) { // console.log(scope.type); var chart = new Highcharts.Chart({ chart: { borderWidth: 1, backgroundColor: '#736F6E', paddingTop:40, marginLeft: 50, marginRight:50, renderTo: element[0], type: scope.chartType }, title: { style:{ fontSize: 14, }, text: scope.title }, subtitle: { text: null }, xAxis: { categories: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ], }, series: [{ name: 'Value', color: '#0000FF', data: scope.items }], }); } } }); Here is my HTML:

答案 1 :(得分:0)

如果我理解正确,您希望通过访问CalculateScore字段在您的派生类中实现scores吗?

简单的答案是,你不能像你那样设计它。 private修饰符确保只有您自己的类才能访问该字段。如果您希望派生类有权访问该字段,则必须在protected字段上将修改器更改为scores

如果您不希望派生类直接访问scores,则必须实现至少具有protected访问权限的方法,以修改已定义的scores字段方式,在基类上。

答案 2 :(得分:0)

所以你的情况:

  • Player是正常的课程
  • Score是一个抽象类
  • Combination也是一个抽象类,它是Score的子类。它包含一个抽象方法CalculateScore,您希望从Player类中调用它。
  • Player的数组为Score s

您可以检查Score数组中的元素是否为Combination类型,然后进行投射。

if(score[0] is Combination)
{
    (score[0] as Combination).CalculateScore(/* arguments here */);
}

您可能需要重新考虑您的课程如何工作。恕我直言,玩家不应该是计算分数的人。也许使用ScoreCalculatorService来处理它。