属性 在私有接口下总是 returns 零
Property under private interface always returns zero
我有一个 属性 的私有接口,因此只有它的所有者 class 可以创建或读取它,但是当我分配给它时,它只是保持为零。
var key = new Key();
((IKey)key).Value = 9;
Debug.Log(((IKey)key).Value);
输出:0
private interface IKey
{
int Value { get; set; }
}
public struct Key : IKey
{
int IKey.Value { get; set; }
}
编辑:我也很好奇为什么在转换时赋值不起作用。
您不应在设置值之前将 key
强制转换为 IKey
。它已经继承了该类型,而您正在屏蔽 Value
属性 中设置的 Key
。顺便说一句,这是一个我更喜欢使用强类型而不是使用 var
的弱类型的实例。见下文:
控制台程序
namespace Console
{
interface IKey
{
int Value { get; set; }
}
public struct Key : IKey
{
public int Value { get; set; }
}
class Program
{
static void Main()
{
var key = new Key();
((IKey)key).Value = 9;
var secondKey = new Key();
secondKey.Value = 9;
var thirdKey = new Key();
thirdKey.Value = 9;
System.Console.WriteLine($"key = {((IKey)key).Value}");
System.Console.WriteLine($"secondKey = {((IKey)secondKey).Value}");
System.Console.WriteLine($"thirdKey = {thirdKey.Value}");
System.Console.ReadLine();
}
}
}
输出
key = 0
secondKey = 9
thirdKey = 9
这是更简单的解决方案
class Program
{
private interface IKey
{
int Value { get; set; }
}
public struct Key : IKey
{
int IKey.Value { get; set; }
}
static void Main()
{
IKey key = new Key();
key.Value = 7;
System.Console.WriteLine($"key = {key.Value}");
System.Console.ReadLine();
}
}
我有一个 属性 的私有接口,因此只有它的所有者 class 可以创建或读取它,但是当我分配给它时,它只是保持为零。
var key = new Key();
((IKey)key).Value = 9;
Debug.Log(((IKey)key).Value);
输出:0
private interface IKey
{
int Value { get; set; }
}
public struct Key : IKey
{
int IKey.Value { get; set; }
}
编辑:我也很好奇为什么在转换时赋值不起作用。
您不应在设置值之前将 key
强制转换为 IKey
。它已经继承了该类型,而您正在屏蔽 Value
属性 中设置的 Key
。顺便说一句,这是一个我更喜欢使用强类型而不是使用 var
的弱类型的实例。见下文:
控制台程序
namespace Console
{
interface IKey
{
int Value { get; set; }
}
public struct Key : IKey
{
public int Value { get; set; }
}
class Program
{
static void Main()
{
var key = new Key();
((IKey)key).Value = 9;
var secondKey = new Key();
secondKey.Value = 9;
var thirdKey = new Key();
thirdKey.Value = 9;
System.Console.WriteLine($"key = {((IKey)key).Value}");
System.Console.WriteLine($"secondKey = {((IKey)secondKey).Value}");
System.Console.WriteLine($"thirdKey = {thirdKey.Value}");
System.Console.ReadLine();
}
}
}
输出
key = 0
secondKey = 9
thirdKey = 9
这是更简单的解决方案
class Program
{
private interface IKey
{
int Value { get; set; }
}
public struct Key : IKey
{
int IKey.Value { get; set; }
}
static void Main()
{
IKey key = new Key();
key.Value = 7;
System.Console.WriteLine($"key = {key.Value}");
System.Console.ReadLine();
}
}