与结构接口,通过使用参考泛型
-
19-09-2019 - |
题
对不起你们!我很入代码!我忘记把编译错误。
下面是简化的代码的一个新版本!
和这是错误:
错误1的最好重载方法匹配“IWeird.DataBase.ModifyData(参照IWeird.IDataTable)”具有一些无效参数,点击 错误2参数 '1':不能从转换 'REF IWeird.Periods' 到 'REF IWeird.IDataTable'
的问题: 我无法通过参考一个接口传递在它的结构体, 我究竟做错了什么?
下面是新的示例代码:
class PeriodsProcessor
{
public PeriodsProcessor()
{
Periods Data = new Periods();
DataBase DB = new DataBase();
Console.WriteLine(Data.Value);
DB.ModifyData(ref Data);
Console.WriteLine(Data.Value);
Console.ReadLine();
}
}
public interface IDataTable
{
string Value { get; set; }
}
public struct Periods : IDataTable
{
public string Value { get; set; }
}
public class DataBase
{
public void ModifyData(ref IDataTable data)
{
data.Value = "CHANGE";
}
}
class Program
{
static void Main(string[] args)
{
PeriodsProcessor PeriodsProcessor = new PeriodsProcessor();
}
}
解决方案
问题是在DB.ModifyData<Period>(Data);
方法调用。您的Data
字段是一个结构,结构将被传递到的任何方法按值强>这意味着每个一次调用该结构的复制强>的方法创建,并传递给方法。所以实际上你ModifyData
方法修改只是在方法调用后扔掉Periods
结构的副本。
其他提示
在你的代码是不及格的接口,在它的结构体,要传递一个实现了接口结构。这是两个完全不同的事情。作为解决你的问题,我没有看到一个原因是使用在所有的结构体,所以我会改变周期内为一类。
的Structs 是值类型,而不是引用类型。如果你想通过引用传递它,你将不得不使用ref
关键字。但请记住,它仍然是一个值类型,并将其分配给另一个变量是要创建一个新的结构。
不隶属于 StackOverflow