是否可以缩短c#中的对象名称?

时间:2014-01-25 12:45:44

标签: c#

我看得很远,并没有提到我试图做什么,所以我有点担心这是不可能的。但我认为值得一试。

我有一个对象,它是放在另一个类中的类的一部分,它是全局的。它看起来像是:

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#中是否可行?

3 个答案:

答案 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;
        }
    }
}

生活是一种方便,如果你这样做......编译器无论如何都会将它全部优化到相同的代码中,因此甚至没有性能损失。