如何声明全局变量

时间:2014-09-05 12:36:33

标签: c# ios uitableview variables xamarin

我正在开发一个应用程序,我需要声明一个像全局变量一样的字符串数组,以便在某些方法中使用它,但问题是我无法分配它。

我的代码:

        protected class ServiceTableSource : UITableViewSource
    {
        **string first = null;
        string second = null;
        protected string[] uuids;**

        protected const string cellID = "BleServiceCell";

        public event EventHandler<ServiceSelectedEventArgs> ServiceSelected = delegate {};

        public List<CBService> Services {
            get { return this._services; }
            set { this._services = value; }
        }

        protected List<CBService> _services = new List<CBService> ();

        public override int NumberOfSections (UITableView tableView)
        {

            return 1;
        }

        **public override int RowsInSection (UITableView tableview, int section)
        {
            return uuids.Length; <---- HERE'S THE PROBLEM!!!!
        }**

        public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
        {
            UITableViewCell cell = tableView.DequeueReusableCell (cellID);
            **CBService service = this._services [indexPath.Row];** <--HERE'S ANOTHER PROBLEM!!!!  I CAN`T REMOVE THE [INDEXPATH.ROW] BECOUSE IS A LIST.


            if (cell == null) {
                cell = new UITableViewCell (UITableViewCellStyle.Subtitle, cellID);
            }

            **first = service.UUID.ToString();
            second = service.Peripheral.Identifier.ToString();
            uuids = new string[]{first, second};**

            cell.DetailTextLabel.Text = "UUID:" + uuids[indexPath.Row];

            return cell;
        }

        public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
        {
            **CBService service = this._services [indexPath.Row];** HERE'S ANOTHER PROBLEM!!!!

            this.ServiceSelected (this, new ServiceSelectedEventArgs (service));

            tableView.DeselectRow (indexPath, true);
        }

        public class ServiceSelectedEventArgs : EventArgs
        {
            public CBService Service {
                get { return this._service; }
                set { this._service = value; }
            }

            protected CBService _service;

            public ServiceSelectedEventArgs (CBService service)
            {
                this._service = service;
            }
        }
    }

我需要使用&#34; uuids.Lenght &#34;获取行数并使用方法NumberOfSections。如果有人有另一个有效的意识形态,我会同意kkk

我无法定义变量first,second或uuids的valor,因为我的值是services.uuid和services.peripheral.uuid,我无法声明服务

嘲笑代码中的评论。

4 个答案:

答案 0 :(得分:5)

我认为您需要的是静态类,您还可以将变量存储在应用程序设置中。

方法1:

public static class GlobalVariables
{
    public static string Global1 = "Hello";
    public static string Global2 = "World";
}

现在,您可以在应用程序的任何位置访问这些变量,如下所示:

GlobalVariables.Global1

方法2:

按照此操作将变量存储在应用程序设置中:

Solution Explorer =&gt;你的项目=&gt;属性=&gt;设置

现在您可以设置变量的名称,类型,范围和值。我附上了截图。

enter image description here

Documentation for Application Setting


我个人更喜欢将我的全局变量存储在我的应用程序设置中,但那只是我。

编辑:

关注此link,我认为它可以解决您的问题。基本上你在这里看到的是覆盖静态方法,但你不能这样做,但幸运的是链接解决了这个问题。如果这有帮助,请告诉我。

答案 1 :(得分:0)

如果您在谈论静态变量,可以使用它。变量NumberOfWheels将在类Automobile的所有实例之间共享。

public class Automobile
{
    protected static int NumberOfWheels = 4;

    public override int getWheels() {
           return wheels;
    }
}

例如,请在此处查看此链接: http://msdn.microsoft.com/en-US/en-en/library/98f28cdx.aspx#

答案 2 :(得分:0)

我可能会读错了,如果是这样,请告诉我,我会删除我的答案。在我看来,您希望在ServiceTableSource课程的所有方面都能获得某些数据(有关服务的信息)。我相信你并不一定关心你是怎么做到的,你只是想到一个全局变量可能有帮助吗?

我认为为了解决这个问题,您需要重新考虑使用ServiceTableSource的方式。通常,当涉及到使用“源”的应用程序时,“源”的实例一旦创建就不会改变。如果您需要根据添加的更多“服务”更新源,那么应创建ServiceTableSource的新实例并将其分配给UITableView对象的Source属性。为了实现这一点,您需要在ServiceTableSource上创建一个构造函数,该构造函数接收“服务”集合并将它们保存到私有变量,并执行从服务中获取数据并创建{{1}的所有逻辑。 }。通过这种方式,您可以访问为此类中的所有string[] uuids方法创建实现所需的所有信息。

以下是我更新代码的看法。我的应用程序周围没有任何其他上下文,因此我无法对此进行测试。让我知道这是怎么回事,如果有问题,我可以帮助你解决这些问题。另外,我不确定你要对这个事件做什么。对此进行一点澄清也会有所帮助。

overridden

答案 3 :(得分:-2)

**public override int RowsInSection (UITableView tableview, int section)
    {
        return uuids.Length; <---- HERE'S THE PROBLEM!!!!
    }**

试试这个:

**public override int RowsInSection (UITableView tableview, int section)
    {
        return uuids.Count; <---- HERE'S NOPROBLEM!!!!
    }**

如果你想要数组中的对象数量或IEnummerable形式的东西,你可以使用Count来获取对象。 如果你想要该数组中一个对象的长度,你必须在代码行中指定该对象,如:return uuids [1337] .length