是否可以使用 Func<T> 泛型作为可以使用方法动态填充的属性?

问题描述 投票:0回答:1

我正在开发某种纸牌游戏,并且一直在尝试找出如何处理 Card 类上的独特纸牌效果。我已将以下课程包括在内。我正在尝试向该类添加一个“效果”属性,该属性可以在构造函数中填充,或者如果需要的话可以稍后通过设置器填充。我遇到的问题是我不知道这个方法是否有返回类型或相同的返回类型。简单的方法似乎是说游戏中的效果方法不能返回值,只需将属性定义为操作,但在某些情况下能够返回某些内容绝对是件好事(主要是测试情况,您可能想确认返回正确的卡片或列表,甚至返回正确的玩家或牌组对象)。

我对

c#
非常陌生,可能遗漏了一些东西或误解了泛型。我添加了类型对象,因为这让我可以使用 getter 和 setter 走出门,但我不知道对象是否本质上允许我返回一个实际上并非从对象扩展的类。

using System;
[System.Serializable]

public class Card
{
  private int id;
  private string title;
  private int cost;
  private int power;
  private string description;
  private Func<object> effect;

  public int Id 
  {
    get { return id; }
    set { id = value; }
  }

  public string Title
  {
    get { return title; }
    set { title = value; }
  }

  public int Cost
  { 
    get { return cost; }
    set { cost = value; }
  }

  public int Power
  {
    get { return power; }
    set { power = value; }
  }

  public string Description
  {
    get { return description; }
    set { description = value; }
  }

  public Func<object> Effect { get => effect; set => effect = value; }

  public Card()
  {

  }

  public Card(int _id, string _title, int _cost, int _power, string _description)
  {
    id = _id;
    title = _title;
    cost = _cost;
    power = _power;
    description = _description;
  }
}

我最初尝试将其定义为:

private Func<> effect;

public Func<> Effect
{
  get { return effect; }
  set { effect = value; }
}

我期望在不定义类型的情况下它可以让我返回非空类型,但我怀疑我在这里误解了泛型的用法。

c# unity-game-engine properties action func
1个回答
0
投票

您可以使用泛型

private Func<T> effect;

public Func<T> Effect
{
  get { return effect; }
  set { effect = value; }
}

解决方案取决于类型的要求。 例如,如果您有一些所有类型都实现的接口,您可以编写:

public Func<T> Effect
   where T: IInterface
{
  get { return effect; }
  set { effect = value; }
}
© www.soinside.com 2019 - 2024. All rights reserved.