我看得很远,并没有提到我试图做什么,所以我有点担心这是不可能的。但我认为值得一试。
我有一个对象,它是放在另一个类中的类的一部分,它是全局的。它看起来像是:
public struct descrptiveButLongName
{ public static GameData relativelyLongName {get; set;} }
class GameData
{ public playerData notSoShortNameToo {get; set;} }
我在我的代码中经常引用descriptiveButLongName.relativelyLongName.notSoShortNameToo(这基本上是游戏中的一个玩家对象),它需要非常非常大的空间。我试图找到一种方法来为该特定属性制作一些简写,所以我可以将它命名为例如PlayerData。有什么影响:
using PlayerData = FileName.descriptiveButLongName.relativelyLongName.notSoShortNameToo;
但是使用实际对象别名,而不是类型名称,同时仍然能够保留描述性名称。这在C#中是否可行?
答案 0 :(得分:5)
首先,有一种叫做得墨忒耳的法则,简短地说“只与你的直接朋友交谈”。
http://c2.com/cgi/wiki?LawOfDemeter
http://en.wikipedia.org/wiki/Law_of_Demeter
基本概念是,根据“信息隐藏”原则,给定对象应尽可能少地假设其他任何东西(包括其子组件)的结构或属性。
在您的情况下,如果您将应用此原则(我强烈建议),即使您的属性名称很长,您也不会遇到此问题。
其次:你是对的,你可以使用“using”指令来表示别名类型和命名空间,但不能用于某些属性。
你可以做什么,因为某种解决方法是创建一个特殊的属性,在它的“获取”访问器取出整个链,但这将打破德米特定律。
答案 1 :(得分:4)
您可以定义一个为您获取此对象的属性:
public GameData pData
{
get { return FileName.descriptiveButLongName.relativelyLongName.notSoShortNameToo; }
}
答案 2 :(得分:1)
虽然在C#中不可能出现这样的别名,但为什么不通过自己制作快捷方式属性来让自己的生活更轻松?
class FileName {
public GameData notSoShortName {
get {
return this.descriptiveButLongName.relativeLongName.notSoShortName;
}
}
}
生活是一种方便,如果你这样做......编译器无论如何都会将它全部优化到相同的代码中,因此甚至没有性能损失。